如何 link 到其中包含 main 的对象?
How to link to an object with main in it?
我想 link 一个带有 main()
的目标文件(.o
文件)到另一个也有 main()
.[=17 的目标文件=]
我想忽略第二个文件中的 main()
,但使用第二个 .o
文件中的 main()
。有办法吗?谢谢。
GNU 链接器有一个选项 --allow-multiple-definition
。当使用它时,ld
忽略任何重复的定义,只使用它遇到的每个符号的第一个。这适用于 所有 符号的定义,当然,不仅仅是 main
。要通过 gcc
驱动程序使用它,您可以使用 gcc
的 -Wl,
选项:
gcc -o myprog -Wl,--allow-multiple-definition main.o second.o
假设两个目标文件是a.o
和b.o
。这两个文件都有 main()
但您只想使用 a.o
.
中的 main()
首先你必须找到函数的确切名称(这是必要的,以防出现名称重整或 _
前缀)。
运行 -
objdump -t | grep "main"
这将显示其中包含单词 main
的符号。选择适当的函数名称。
现在我们将其重命名为其他名称 -
objcopy --redefine-sym main=some_rubbish_name_not_anywhere b.o
(将 main 替换为您在上述命令中获得的任何符号名称)
现在您可以像往常一样 link 您的目标文件 -
clang a.o b.o -o program
另一种方法是从 b.o
中完全去除 main
符号(正如@ChrisBodd 在评论中所建议的那样)-
objcopy --strip-symbol=main b.o
我想 link 一个带有 main()
的目标文件(.o
文件)到另一个也有 main()
.[=17 的目标文件=]
我想忽略第二个文件中的 main()
,但使用第二个 .o
文件中的 main()
。有办法吗?谢谢。
GNU 链接器有一个选项 --allow-multiple-definition
。当使用它时,ld
忽略任何重复的定义,只使用它遇到的每个符号的第一个。这适用于 所有 符号的定义,当然,不仅仅是 main
。要通过 gcc
驱动程序使用它,您可以使用 gcc
的 -Wl,
选项:
gcc -o myprog -Wl,--allow-multiple-definition main.o second.o
假设两个目标文件是a.o
和b.o
。这两个文件都有 main()
但您只想使用 a.o
.
main()
首先你必须找到函数的确切名称(这是必要的,以防出现名称重整或 _
前缀)。
运行 -
objdump -t | grep "main"
这将显示其中包含单词 main
的符号。选择适当的函数名称。
现在我们将其重命名为其他名称 -
objcopy --redefine-sym main=some_rubbish_name_not_anywhere b.o
(将 main 替换为您在上述命令中获得的任何符号名称)
现在您可以像往常一样 link 您的目标文件 -
clang a.o b.o -o program
另一种方法是从 b.o
中完全去除 main
符号(正如@ChrisBodd 在评论中所建议的那样)-
objcopy --strip-symbol=main b.o