MinGW环境下链接自定义数学库libmcs替换默认libm的问题
MinGW下替换默认数学库链接的问题
我使用MinGW的gcc 6.3.0版本编译C程序(main.c),想要链接已编译好的外部数学库libmcs。尝试了以下两条编译命令:
gcc -o main_libm.exe main.c -lm gcc -o main_libmcs.exe main.c -LC:\..\libmcs\bin -lmcs
两条命令都编译成功,但可以确定main_libmcs.exe仍然链接了默认C数学库——因为两个程序的运行结果完全一致,不符合我预期的数值近似差异。
经调研得知,即使不手动指定-lm,MinGW也会自动链接默认数学库,-nostdlib选项可以禁用自动链接。但使用该选项链接外部库时:
gcc -nostdlib test_mathlib.o -LC:\..\libmcs\bin -lmcs -lc
出现错误:
undefined reference to `__main'
添加-lgcc选项后:
gcc -nostdlib test_mathlib.o -LC:\..\libmcs\bin -lmcs -lc -lgcc
又出现新的错误:
In function `__do_global_ctors': ... undefined reference to `atexit'
推测是缺少更多必要的库链接。
我有以下问题:
- 是否存在可以仅禁用或替换默认C数学库自动链接的选项?
- 如果没有这样的选项,使用
-nostdlib时还需要添加哪些库链接?
平台详情
Target: x86_64-w64-mingw32 Thread model: win32 gcc version 6.3.0 (x86_64-win32-seh-rev2, Built by MinGW-W64 project)
内容的提问来源于stack exchange,提问作者Giovanni Bay
相关产品推荐
相关产品推荐

