如何在使用 gcc(不是 g++)编译的 C 项目中组合C++对象文件
How to combine a C++ object file in a C project compiled with gcc (not g++)?
另一个 C/C++ 集成问题:我正在尝试使用我在C++库中拥有的功能更新一些遗留的 C 库(我们称之为 libcl.a
libcppl.a
)。liblc.a
库在我的环境中随处可见,并使用GCC(在C编译器模式下)链接到许多C项目中:
>> gcc prog.c -lcl
该libcl.a
当前由cl.o
对象文件(使用 cl.c
+ cl.h
中的gcc
创建)。
libcppl.a
由cppl.o
对象文件(使用 cppl.cpp
+ cppl.h
中的g++
创建)。
由于现有应用程序是用 C 编写的,并且构建脚本使用 GCC,因此我希望尽可能简单地过渡到更新的库。因此,我想继续使用 GCC 作为主编译器,但仍然能够与更新的库链接。
找到这个答案,我可以使用-lstdc++
将C++对象链接到GCC C项目中:
>> gcc -c cl.c -o cl.o
>> g++ -c cppl.c -o cppl.o
>> ar rcs libcl.a cl.o cppl.o
>> gcc prog.c -lcl -lstdc++
但是,我想消除编译命令行中对libstdc++
的明确提及。
我试图做的是将libstdc++包含在cl库中,方法是:
>> ar rcs libcl.a cl.o cppl.o /usr/lib/libstdc++.so.6
但是,在构建应用程序时,我得到:
>> gcc prog.c -lcl
In file included from cppl.cpp:2:
./libcl.a(cppl.o):(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
1. 为什么 gcc 链接器找不到与我的对象一起存档的C++标准库?
2. 将ar
与库(相对于目标文件)一起使用是否有限制?
3. 有没有办法克服这个问题?
您可以使用
gcc
单独编译prog.c
,然后使用g++
链接:
# compile the main program to an object file
gcc prog.c -o prog.o
#use g++ to link everything (it'll automatically pull in libstdc++)
g++ prog.o -lcl
或者,您可以通过显式告诉g++
使用 -x
选项将prog.c
编译为 C 源文件,一步到位编译和链接prog.c
:
g++ -x c prog.c -lcl
有关gcc
和g++
之间行为差异的详细信息,请参阅 https://stackoverflow.com/a/5854712/12711。
相关文章:
- 从文本文件在组合框中添加项目
- 在组合框中拖放项目
- 如何在C++项目中组合着色器源?
- 删除并清除组合框 Win32 API 中的所有项目
- 将两个数组组合在一起,形成每个项目的一对
- 在Qt组合框中设置项目
- MFC 组合框下拉列表:仅显示一个项目
- 项目列表中的组合
- 如何获取组合框项目计数
- 如何将库与__stdcall和__cdecl组合在一个vs2008项目中
- Qt 组合框:选择项目时的事件
- 根据组合框中所选项目设置标签文本 (QT/C++)
- 将组合框中的类型字符串与其项目进行比较
- 从一个组合框中选择项目,然后从其他组合框中删除该项目
- 如何在组合框中发送这些项目
- 如何创建具有不同项目字符串的两个不同的组合框
- 根据组合框中的选定项目选择算法
- C ++ win 32,我想将项目列表添加到组合框中.我该怎么做
- 将一个项目组合到另一个项目中的方法
- 如何将基于OSGi的项目与基于c++的项目组合起来