我安装了64位的db2express和cygwin。我正在尝试一个非常简单的测试:
gcc ex1.o-o ex1.exe../../sqllib/lib/db2api.lib
..//sqllib/lib/db2api.lib(DB2APP64.dll.b):(.text+0x2):根据../..中.data$5节中定义的符号__imp_sqlastrt' defined in .idata$5 section in ../../sqllib/lib/db2api.lib(DB2APP64.dll.b)
../../sqllib/lib/db2api.lib(DB2APP64.dll.b):(.text+0x2): relocation truncated to fit: R_X86_64_32 against symbol
__imp_sqlaaloc,截断重新定位以适应:R_X86_64_32/sqllib/lib/db2api.lib(DB2APP64.dll.b)../../sqllib/lib/db2api.lib(DB2APP64.dll.b):(.text+0x2):根据../..中.data$5节中定义的符号"__imp_sqlasetdata"截断重新定位:R_X86_64_32/sqllib/lib/db2api.lib(DB2APP64.dll.b)等等。
我尝试了所有的mcmodel选项,但都没有成功。除此之外,我找不到解决这个问题的办法。我需要做什么才能使其正确链接?
(与前一篇文章的问题相同,但经过大量搜索,似乎其他人已经得到了与上述非常相似的东西,可能是在32位机器上)
如果您使用的是binutils
版本2.24,我怀疑问题如下:https://sourceware.org/bugzilla/show_bug.cgi?id=16598
幸运的是,GNU ld
的Cygwin端口能够直接链接DLL。指定相关DLL而不是导入库db2api.lib
到gcc
应该有效。