Gcc 64位db2 db2api.lib的链接问题被截断以适应错误

Gcc 64位db2 db2api.lib的链接问题被截断以适应错误,gcc,db2,cygwin,64-bit,Gcc,Db2,Cygwin,64 Bit,我已经安装了64位的DB2Express和cygwin。我正在尝试一个非常简单的测试: gcc ex1.o-o ex1.exe.././sqllib/lib/db2api.lib ../../sqllib/lib/db2api.lib(DB2APP64.dll.b):(.text+0x2):根据.././sqllib/lib/db2api.lib(DB2APP64.dll.b)中的.idata$5节中定义的符号\u imp\u sqlastrt'截断重新定位以适合:R_X86\u 64\u 32

我已经安装了64位的DB2Express和cygwin。我正在尝试一个非常简单的测试:

gcc ex1.o-o ex1.exe.././sqllib/lib/db2api.lib

../../sqllib/lib/db2api.lib(DB2APP64.dll.b):(.text+0x2):根据.././sqllib/lib/db2api.lib(DB2APP64.dll.b)中的.idata$5节中定义的符号
\u imp\u sqlastrt'截断重新定位以适合:R_X86\u 64\u 32
../../sqllib/lib/db2api.lib(DB2APP64.dll.b):(.text+0x2):重新定位被截断以适合:R_X86_64_32与.././sqllib/lib/db2api.lib(DB2APP64.dll.b)中的.idata$5节中定义的符号相对应
../../sqllib/lib/db2api.lib(DB2APP64.dll.b):(.text+0x2):根据.././sqllib/lib/db2api.lib(DB2APP64.dll.b)中的.idata$5节中定义的符号“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
等等

我尝试了所有的mcmodel选项,但都没有用。除此之外,我找不到解决这个问题的方法。我需要做什么才能正确链接


(与前一篇文章的问题相同,但经过大量搜索,似乎其他人已经获得了与上述非常类似的工作,大概是在32位机器上)

如果您使用的是
binutils
version 2.24,我怀疑问题是这样的:


幸运的是,GNU
ld
的Cygwin端口能够直接链接到DLL。指定相关DLL而不是导入库
db2api.lib
gcc
应该可以工作。

这个问题有什么问题?我读过的与这个主题相关的其他问题都没有解决它。有人能解释一下为什么IBM的db2api.lib在64位系统上没有像在32位系统上那样开箱即用的链接方式吗。我不明白为什么这不是一个试图找到答案的合理问题。请发表评论,我将尝试遵循您给出的任何建议。例如,在这种类型的错误上,唯一一个高评级的页面指向一个只有在您编写汇编程序时才适用的解决方案。这里的情况并非如此。这是一个简单的C程序(也许我应该提到这一点,但如果没有其他说明,gcc通常意味着C)。那么这个问题有什么解决方案呢?我可以更改编译器或数据库,但在尝试任何一种方法之前,最好先做出明智的响应。你知道什么?我解决了。现在如果有人说问题出了什么问题,我会根据需要更新。顺便说一句,我真的没想到这会起作用,但是当你没有选择的时候,你会尝试所有的方法。用Cygwin构建是否真的得到了IBM的支持?它在32位db2上运行得很好,这就是我在我上面的修复不够好之后所采用的方法(它让它链接并运行起来没有错误,但结果后来是错误的)。谢谢。我的链接和执行解决方案是直接针对DLL进行链接(我真的没想到会这样)。然而,我后来从程序中得到的结果却不正确。我最终在32位数据库系统上完成了这项工作,使用的方法与我在64位数据库系统上尝试的方法相同。因此,就能够链接IBM的64位DB2而言,问题仍然很突出。