c++ - 需要避免在需要使用链接器脚本 *.ld 文件的静态库中对 `WinMain' 的 undefined reference

标签 c++ gcc linker ld

我有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/

相关文章:

c++ - QT Creator 链接错误 1120

c++ - 用于聚合结构初始化时的三元运算符整数表达式的类型

c++ - 使用 ubuntu 的 C++ 中 std::stoi 的问题

c++ - 获取鼠标在 QLabel 中单击的位置

c - 如何在 Sublime Text 2 [MAC OS X] 上运行和编译 .c

C++ 使用项目而不是库

c++ - 在 sparc solaris 上使用 gcc 为长整数赋值

c++ - const_cast 和射击你自己的脚

c - stdbool.h 在哪里?

c++ - Bjam:忽略特定库