我有这些文件:help.cpp help.h help.o main.cpp 我想创建一个静态库。
help.cpp
#include <iostream>
#include "help.h"
using namespace std;
void hello()
{
cout << "hi" << endl;
}
help.h
#ifndef HELP_H
#define HELP_H
void hello();
#endif
的main.cpp
#include <iostream>
#include "help.h"
using namespace std;
int main()
{
hello();
return 0;
}
创建静态库:
ar rcs libST.a help.o
g++ main.cpp -L . -l ST #to create my binary
我跑了,打印出来
hi
我想为什么不这样做:g++ main.cpp libST.a
它也有效。
请告诉我,命令2和3有什么区别?
答案 0 :(得分:2)
在这种情况下,两者的行为(几乎)相同,但存在一些差异。
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
这样做也是如此,但您明确地提供了一个静态库来链接。这不会搜索,并且它不可能链接到共享库,它只是将目标文件从存档中拉出来并在链接时使用它们。