C++ 编译与静态链接
我有以下文件:help.cpp help.h help.o main.cpp 我想创建一个静态库 help.cpp main.cppC++ 编译与静态链接,c++,compilation,linker,C++,Compilation,Linker,我有以下文件:help.cpp help.h help.o main.cpp 我想创建一个静态库 help.cpp main.cpp 我想为什么不这样做:g++main.cpp libST.a,它也能工作 请告诉我,命令2和命令3之间有什么区别?在这种情况下,两者的行为(几乎)相同,但有一些区别 g++ main.cpp -L . -l ST 这将编译main.cpp并尝试将其与名为libST的内容链接。这将搜索整个链接器搜索路径(通常为/usr/local/lib、/lib和/usr/li
g++main.cpp libST.a
,它也能工作请告诉我,命令2和命令3之间有什么区别?在这种情况下,两者的行为(几乎)相同,但有一些区别
g++ main.cpp -L . -l ST
这将编译main.cpp并尝试将其与名为libST
的内容链接。这将搜索整个链接器搜索路径(通常为/usr/local/lib、/lib和/usr/lib),包括当前目录(因为您使用-L
指定了它)。请注意,只要名为libST.a或libST.so,就可以链接到共享库或静态库
如果当前文件夹中不存在libST,则链接器也会在其知道的所有其他文件夹中进行搜索
g++ main.cpp libST.a
这也是一样的,但是您显式地提供了一个静态库来进行链接。这不会搜索,也不可能链接到共享库,它只会将目标文件从存档中拉出,并在链接时使用这些文件。标题有点混乱,还有其他建议吗?1.在这两种情况下,库的内容都将复制到最终可执行文件中?2.实际上,区别在于,在第一个命令中,它还将搜索一个*.so文件,而在第二个命令中,我直接给链接器一些可以使用的东西,而不需要搜索其他东西?感谢You@Oleg-这要看情况了。您可以将编译器配置为只拉入正在使用的位,但是可以,在这两种情况下(给定特定的第一个命令),库都将被拉入。另外,对于(2),是的,不同之处在于编译器将如何搜索库。。。听起来很新鲜,你能给我一个关键字来搜索吗?我相信它既有
-fffunction部分
也有-gc部分
。
#include <iostream>
#include "help.h"
using namespace std;
int main()
{
hello();
return 0;
}
hi
g++ main.cpp -L . -l ST
g++ main.cpp libST.a