如何使用 g++ 创建静态库
How to create a static library with g++?
有人可以告诉我如何从.cpp和.hpp文件创建静态库吗?我需要创建 .o 和 .a 吗?我还想知道如何在其他.cpp代码中编译静态库并将其用于。我有header.cpp
,header.hpp .
我想创建header.a
。在 test.cpp
中测试标头.a 。我正在使用 g++ 进行编译。
创建一个 .o 文件:
g++ -c header.cpp
将此文件添加到库中,必要时创建库:
ar rvs header.a header.o
使用库:
g++ main.cpp header.a
您可以使用
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
有人可以告诉我如何 从.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
不过,我会给你一个好处,怀疑你的实际用例有点复杂,有更多的模块。
希望这有帮助!
相关文章:
- 将对象创建为全局/静态对象会崩溃,而本地对象不会崩溃
- 如何在不使用静态矩形方法的情况下创建 IDOMPathGeometryPtr?
- 如何使用类型级函数动态创建静态类型?
- 返回从字符串文本创建的静态string_view是否安全?
- QBS 为静态链路 MSVC 创建静态库
- 如何为要在 C# 中使用的静态库创建 C++ 或 C++/CLI 包装器
- 如何使用 GCC 编译器优化创建静态库?
- 如何使用指向动态数组的静态指针创建类?
- 为静态类创建指向对象的指针是否合法?
- 为动态创建的数组使用静态关键字有什么意义吗?
- 创建自己的owner_ptr类;在传递堆栈或静态分配的地址时如何避免UB?
- 我正在尝试在我的类中创建一个静态成员,但编译器警告我它是未定义的
- 如何使用 c++ 源代码和静态库创建 iOS 框架
- 创建静态哨兵节点的正确方法是什么
- 如何从静态c和c++库创建共享c库
- 创建类型列表并访问每种类型的静态成员?
- 为什么调用 cout.operator<<(const char*) 打印地址而不是字符串? 如何创建一个函数本地静态"HashSet<char>"并初始化它一次?
- 为什么在静态创建 OBJ 时调用私有析构函数
- 从静态创建方法中的基类调用非静态方法
- 内联函数返回静态创建的对象