gcc 编译器是众多编译器组合入口,例如在编译 .cpp 文件时,使用c++ 编译器,编译.c 文件时,使用c编译器。
在编译c++程序时, 库文件与头文件可通过 -L[dir] 指定库目录 , -l[name] 指定库文件名称。指定库文件名称时,需按照指定范式。例如库文件 libabc.a , [lib]abc[.a] 中括号部份默认乎略, 此时库文件名称为: abc ,因此在gcc 编译时,通过 -labc 来加载该库.
通常c++ 程序会用到标准库,例如代码中包含 string
#include<string>
using namespace std;
在编译时,会遇到fatal error: string: No such file or directory compilation terminated , 因为代码中使用了标准库代码,编译时,没包含该库。c++标准(静态/动态)库名称是: libstdc++.a , libstdc++.so , 因此编译时gcc指令附加 -lstdc++
gcc -I/usr/include/openssl/ -Wall testzs.cpp -o testzsexe -lcrypto -ldl -lstdc++
这条指令包含了3个库 , -o 输出编译结果为:testzsexe , -Wall 表示输出全部编译警告信息, 如果将 -Wall 改为 -Werror , 表示遇到警告信息时,停止编译。 -I 指定库头文件路径。本例中也可不指定 /I指令。因为 /usr/include 是系统默认头文件路径。 在代码中使用 #include<openssl/....h> 即可。
在window 平台代码移值到linux 时,遇到如下异常: fopen_s?was not declared in this scop , 在linux 中没有fopen_s(...)函数, 因此,要么始用linux 平台的fopen 函数,或者重新实现 fopen_s 函数。