如何使用GCC制作基于其他静态库的静态库
How to make a static lib based on other static libs using GCC?
我想使用一些现有的静态库:libX.a
, libY.a
, libZ.a
和一些目标文件制作一个名为libXYZ.a
的静态库。我用来构建静态库libXYZ.a
的命令行是:
ld -o libXYZ.a one.o two.o -L./ -L/cygdrive/c/cygwin/lib/gcc/i686-pc-cygwin/4.8.2 -lX -lY -lZ -lstdc++
我使用Cygwin GCC (g++)来编译one.cpp
和two.cpp
,以在ld
命令之前获得one.o
和two.o
,如下所示:
g++ -o one.o one.cpp -c
g++ -o one.o two.cpp -c
libX.a
, libY
.a, libZ.a
都位于当前目录(这就是为什么-L./
)。并且我在ld
行中添加了c++标准库链接器标志-lstdc++
。但是当我这样做时,我得到了以下错误:
one.o: one.cpp:(.text+0x32): undefined reference to `_Unwind_Resume'
ld: one.o: bad reloc address 0xd in section `.text$_ZN10ConfigC1Ev[__ZN10ConfigC1Ev]'
Makefile:22: recipe for target 'libXYZ.a' failed
所以我的问题是:ld
命令是从其他静态库和。o文件构建静态库的正确命令吗?是什么导致了错误?我搜索了论坛,发现这可能是由一些不兼容的编译器引起的。但是我使用相同的GCC编译器构建了所有的源代码。
我再次尝试使用以下命令:
ld -o libXYZ.a one.o two.o -L./ -lX -lY -lZ
但是我仍然得到以下错误:
one.o:one.cpp:(.text+0x32): undefined reference to `_Unwind_Resume'
one.o:one.cpp:(.text+0x12a): undefined reference to `_Unwind_Resume'
...
./libX.a(wrapper.o):wrapper.cpp:(.text+0x7ba): undefined reference to `__chkstk_ms'
./libX.a(wrapper.o):wrapper.cpp:(.text+0x7ba): undefined reference to `_Unwind_Resume'
...
我省略了许多类似的错误,如上面的_Unwind_Resume
错误。你知道是什么导致了这些错误吗?
所以我的问题是:ld命令是从其他静态库和。o文件构建静态库的正确命令吗?
。
相关文章:
- 使用 CMake 与其他静态库链接的静态库 - 一个有效,一个无效。为什么?
- 访问从 CPP 文件到其他头文件的静态变量
- 如何将 cpp 文件中的静态函数公开给其他文件
- 在这种情况下,我们可以使用静态而不是朋友吗,还有其他解决方案是什么
- 将函数的引用设置为其他 c++ 文件中的非静态函数
- 当其他链接库链接 stdc++ 为动态时,如何将 libstdc++ 链接设置为静态?
- 与其他静态const成员初始化静态常量成员
- 如何将GCC中的静态库与其他动态库链接
- 如何添加其他CMAKE模块的静态LIB
- 如何在任何其他全局变量或静态变量之前创建/构造类实例
- 如何链接一个使用其他库的静态C库
- Cmake:制作静态库并在其他项目中使用
- 依赖于其他静态库的静态库
- 未解决的外部符号 - 来自其他项目的静态函数
- buildroot:仅构建一个包裹作为共享和静态lib,所有其他包装仅共享
- 其他静态阵列破坏了OMAPL138目标(CCS5.2)上的DSP应用程序
- Visual Studio生成的静态库最大文件大小或其他限制
- 与其他库链接的静态库-LINKER警告
- C 代码 - 覆盖率(或其他静态代码分析仪) 线程安全
- SFML 不静态链接到 openal32(静态链接到所有其他依赖项)