Compilation 在编译过程中可以链接到不同的对象吗?

Compilation 在编译过程中可以链接到不同的对象吗?,compilation,linker,Compilation,Linker,假设我有两个版本的库,它们位于文件夹“V1”和“V2”中,我有两个C文件:“V1.C”和“V2.C”,其中“V1.C”将使用库“V1”,而“V2.C”将使用库“V2”。请注意,“V1”和“V2”具有相同的接口。我试过: g++ -c v1.c -o v1.o -I${V1}include g++ -c v2.c -o v2.o -I${V2}include g++ main.c -L${V1}lib v1.o -L${V2}lib v2.o -lsomething 请注意,在上一个链接步骤中,

假设我有两个版本的库,它们位于文件夹“V1”和“V2”中,我有两个C文件:“V1.C”和“V2.C”,其中“V1.C”将使用库“V1”,而“V2.C”将使用库“V2”。请注意,“V1”和“V2”具有相同的接口。我试过:

g++ -c v1.c -o v1.o -I${V1}include
g++ -c v2.c -o v2.o -I${V2}include
g++ main.c -L${V1}lib v1.o -L${V2}lib v2.o -lsomething

请注意,在上一个链接步骤中,我在2个对象文件之前提供了2个库路径。显然,这不会达到我的预期,但我只是想表明我的意图。感谢您的建议。

它将使用第一个找到的合适符号,即,如果两个库中都有函数“bar”,并且库名称相同,则将使用搜索中位于第一位的文件中的函数“bar”

您可以为不同库中的符号指定不同的名称(它们仍然具有相同的名称),也可以为库指定不同的名称

尽管我仍然不确定重命名符号是否会有帮助,因为链接器可能只是针对第一个遇到的库进行链接,然后抱怨它不包含所需的其他符号。最可靠的方法是重命名库


如果有什么不清楚的地方,请发表意见,我将尝试进一步解释。

您的错误是什么?