【发布时间】:2011-08-22 06:27:30
【问题描述】:
谁能告诉我如何从 .cpp 和 .hpp 文件创建静态库?我需要创建 .o 和 .a 吗?我还想知道如何编译静态库并在其他 .cpp 代码中使用它。我有header.cpp,header.hpp . 我想创建header.a。测试 test.cpp 中的 header.a。我正在使用 g++ 进行编译。
【问题讨论】:
标签: c++ gcc compiler-construction g++
谁能告诉我如何从 .cpp 和 .hpp 文件创建静态库?我需要创建 .o 和 .a 吗?我还想知道如何编译静态库并在其他 .cpp 代码中使用它。我有header.cpp,header.hpp . 我想创建header.a。测试 test.cpp 中的 header.a。我正在使用 g++ 进行编译。
【问题讨论】:
标签: c++ gcc compiler-construction g++
您可以使用ar 实用程序创建.a 文件,如下所示:
ar crf lib/libHeader.a header.o
lib 是一个包含所有库的目录。以这种方式组织代码并将代码和目标文件分开是一种很好的做法。将所有内容放在一个目录中通常看起来很难看。上面的行在目录lib 中创建了libHeader.a。所以,在你的当前目录中,执行:
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。
创建一个 .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 对于可执行文件名称就好了,如当然,只要你只是写一个快速测试 sn-p。)
test 是我学会了后悔的艰难方法,我“完全有能力使用外壳”。这是一个坏主意,而且我已经看到它咬了许多“完全有能力使用外壳”的人。