需要避免在需要使用链接器脚本 *.ld 文件的静态库中对"WinMain"进行未定义的引用

Need to avoid undefined reference to `WinMain' in a static library that needs to use a linker script *.ld file

本文关键字:静态 WinMain 引用 未定义 ld 链接 脚本 文件      更新时间:2023-10-16

我有 3 个静态库,其中一个 (BinaryMain) 具有入口函数

int32_t  main(int32_t arg, char** argv) {
..
..
}

我想通过组合这三个静态库(BinaryMain,Binary1,Binary2)来创建可执行文件

在创建静态二进制文件(二进制 1 和二进制 2)

时,我想使用特定的链接器脚本文件(二进制 1.ld、二进制 2.ld),并为每个文件生成映射文件。BinaryMain 引用了 Binary1 和 Binary2 中的变量/函数,我使用

属性((弱))

.

但是在创建静态库(二进制 1 和二进制 2)时,我收到错误

(.text.startup+0x25):未定义对"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"。

我有一个等效的目标构建,其中所有三个二进制文件都是精灵,一个包含主文件。我不确定我创建 pc 构建的尝试是否适用于 exe。

等待一些有价值的建议。提前致谢席德

链接器认为您正在构建 GUI 应用程序而不是控制台应用程序,因此它希望WinMain而不是main解析入口点。 可以使用-mconsole告诉链接器需要控制台应用程序。