在编译期间可以链接到不同的对象吗?

时间:2013-02-14 01:06:25

标签: 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

请注意,我在最后一个链接步骤中的2个目标文件之前提供了2个库路径。显然它不会按照我的预期行事,但我表示只是为了明白我的意图。谢谢你的任何建议。

1 个答案:

答案 0 :(得分:1)

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

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

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

如果不清楚,请发表评论,我会尝试进一步解释。