我有3个静态库,其中一个(BinaryMain)有入口函数
int32_t main(int32_t arg, char** argv) { .. .. }
我想通过组合这三个静态库(BinaryMain、Binary1、Binary2)来创建一个可执行文件
在创建静态二进制文件(Binary1 和 Binary 2)时,我想使用特定的链接描述文件(binary1.ld、binary2.ld)并为它们中的每一个生成映射文件。 BinaryMain 引用了 Binary1 和 Binary2 中的变量/函数,我使用
attribute((weak))
.
但是在创建静态库(Binary1 和 Binary2)时出现错误
(.text.startup+0x25): undefined reference to `WinMain'
使用的每个静态二进制文件的命令行是
g++ -o libbinary1.a -Wl,--start-group component1.a component2.a -static -Xlinker -Map=binary1.map -Tbinary1.ld -Wl,--end-group -LTools\win-builds-64\lib -LTools\msys_Python\Python34 -lstdc++ -lgcov -lpython34
我知道主要条目仅在 libBinaryMain.a 中,不包含在 libbinary1.a 或 libbinary2.a 中,但我如何告诉链接器在链接这两个二进制文件时停止查找“WinMain”。
我有一个等效的目标构建,其中所有三个二进制文件都是 elf,一个包含 main.我不确定我创建 PC 版本的尝试是否适用于 exe。
等待一些有值(value)的建议。 提前致谢 席德
最佳答案
链接器认为您正在构建 GUI 应用程序而不是控制台应用程序,因此它正在寻找解析入口点 WinMain
而不是 main
。您可以使用 -mconsole
告诉链接器您想要一个控制台应用程序。
关于c++ - 需要避免在需要使用链接器脚本 *.ld 文件的静态库中对 `WinMain' 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34923057/