Answers:
创建一个.o文件:
g++ -c header.cpp
将此文件添加到库中,如有必要,创建库:
ar rvs header.a header.o
使用库:
g++ main.cpp header.a
a.out
因此极易引起误解。以及为什么不应该“从不”创建一个名为的可执行文件test
?
test
系统命令有关。但是由于测试程序通常永远不会安装在系统bin目录中并且需要您编写,./test
所以这对我来说也不是什么大问题……
a.out
格式生成,但由于遗留原因而保留了该名称。(如果您不能正确使用shell,那就是您的问题;我曾经知道如何从当前目录运行可执行文件。对于可执行文件名称test
来说就很好,只要您编写的是快速测试代码段。)
test
是我很难后悔的事情,而且我“完全有能力使用Shell”。这是一个坏主意,我已经看到它咬伤了许多“完全能够使用外壳”的人。
您可以.a
使用该ar
实用程序创建文件,如下所示:
ar crf lib/libHeader.a header.o
lib
是包含所有库的目录。优良作法是用这种方式组织代码并将代码和目标文件分开。将所有内容放在一个目录中通常看起来很丑。上一行libHeader.a
在目录中创建lib
。因此,在当前目录中,执行以下操作:
mkdir lib
然后运行上面的ar
命令。
链接所有库时,可以这样进行:
g++ test.o -L./lib -lHeader -o test
该-L
标志将把目录g++
添加lib/
到路径中。这样,g++
在查找时便知道要搜索的目录libHeader
。-llibHeader
标记要链接的特定库。
创建test.o的地方是这样的:
g++ -c test.cpp -o test.o
-lHeader
不是-llibHeader
?
有人可以告诉我如何从.cpp和.hpp文件创建静态库吗?我需要创建.o和.a吗?
是。
创建.o(按照常规):
g++ -c header.cpp
创建档案:
ar rvs header.a header.o
测试:
g++ test.cpp header.a -o executable_name
请注意,仅使用一个模块进行归档似乎有点没有意义。您可以很容易地写出:
g++ test.cpp header.cpp -o executable_name
尽管如此,我还是会给您带来疑问的好处,即您的实际用例会更复杂,带有更多的模块。
希望这可以帮助!
ranlib
GNU中的简单含义ar s
。