我在使用x64环境集进行编译时看到以下链接错误。
somefile.def : error LNK2001: unresolved external symbol _somesymbol
somepath\somefile.lib : fatal error LNK1120: 1 unresolved externals
gmake[2]: *** [somepath\somefile.dll] Error 1120
当我检查在x86中生成的somefile.def时,它也具有相同的上述符号,不同之处在于它具有双下划线('__somesymbol')。这背后的原因是什么?
该代码包含C和C ++文件。
任何人都可以通过详尽的解释来帮助解决此问题?
谢谢
最佳答案
标识符不会以64位代码修饰。完全没有必要,x64没有大量的调用约定。使用链接器的映射文件进行验证,该文件应为纯somesymbol
,且前导下划线不存在。因此,您当然需要相应地修改.def文件,我们从这里看不到它。偏爱__declspec(dllexport)
属性。
–汉斯·帕桑特
我调整了make代码,用“ __somesymbol”而不是“ _somesymbol”生成“ somefile.def”,并且可以成功地构建我的x64位库和dll文件。 – Samanyu