合并 c++ obj 文件以进行 C 链接
Posted
技术标签:
【中文标题】合并 c++ obj 文件以进行 C 链接【英文标题】:Merge c++ obj files for C linking 【发布时间】:2017-03-23 14:14:55 【问题描述】:我有一个庞大的 C/Pro*C 项目想要改进。我复制了一段,用 C++ 重写,它编译并运行良好。
我现在想将它包含到我的 C 项目中。为此,我想将我所有的小 obj 文件合并为一个,然后在最终链接期间将其与其他 obj 文件一起添加。
但是,我遇到了错误,需要帮助。
我尝试了ld -Ur file1.o file2.o -llib1 -llib2 -o feature.o
,但 ld 抱怨它找不到我的库(没有一个)
我尝试了ld -Ur file1.o file2.o -o feature.o
,但后来 ld 抱怨说有大量未定义的对各种 STL 元素的引用。
我尝试了g++ file1.o file2.o -llib1 -llib2 -o feature.o
,但它抱怨它找不到 main(),这是完全正常的,因为我不希望他制作可执行文件
我试过g++ file1.o file2.o main.o -llib1 -llib2 -o feature
,它编译得非常好,但这不是我想要的......
我试过g++ -Xlinker -Ur file1.o file2.o -o feature.o so that g++ would give automagically the stl links to ld, but again, ld could not find the STL...
请问我该怎么办?
编辑: 我希望尽可能少更改的主 makefile 包含二进制文件列表及其关联的 obj 文件。我希望将我的 obj 文件添加到这些列表之一,以便最终链接是透明的。
EDIT2:我不想创建一个库。我的新代码将替换旧代码,我想逐个模块地使用相同的过程。
【问题讨论】:
不确定你到底想要什么。您可以尝试使用ar
使用您的目标文件创建一个静态库。
即使你获得了成功的合并,你仍然需要使用 g++ 进行链接。
听起来您正在尝试构建一个库?网上有很多资源可以帮助你做到这一点。
谨防名称篡改。许多 C++ 编译器根据函数的参数和返回类型为函数创建新名称。
嗯...,您真的应该尝试显示minimal reproducible example。举个简单的例子,ld -Ur file1.o file2.o -o feature.o
后跟 c++ main.o feature.o -o foo
实际上会生成一个 foo
可执行文件。
【参考方案1】:
要将目标文件合并到静态库中,您应该使用ar
【讨论】:
以上是关于合并 c++ obj 文件以进行 C 链接的主要内容,如果未能解决你的问题,请参考以下文章
链接错误2005 Visual Studio 2008 C++