c++builder编译带有vc dll时出现linker error,unresovled external ‘_xxxxx‘

c++builder编译带有vc dll时出现linker error,unresovled external '_xxxxx'

原因,网上很多人给出implib的用法:

implib aaa.lib aaa.dll是不完整的。

需要改为:

implib -a aaa.lib aaa.dll

所以的所以,很多人不熟悉,查资料。有的人查到对的,有的人查到错误的用法。我就是这样,之前编译1.1.1a的dll时正确,结果到0.9.8时遇到标题的错误。

查资料:

-a Add '_' alias for cdecl functions for compatibility with Microsoft libraries
-c Warnings on case sensitive symbols
-f Force imports by name
-w No warnings.

用C++Builder的implib工具生成DLL(VC生成DLL)对应的lib文件。
如:implib -a xxx.lib xxx.dll(注意,implib一定要带-a开关)。
生成lib文件之后,C++Builder便可以使用这个lib文件了。

提示:使用和不使用开关-a。可以用ultredit对比得到函数名前面带有下划线。所以编译时才出现提示。带上开关后编译就正常了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1)VsDll为vs2010工程,编译生成动态库。 2)BCBCall为bcb工程,调用动态库 3)Viewdll.exe为查看DLL导出文件的工具。 注意事项一: VSDll里面有一个 KpHttps.def LIBRARY "KpHttps" EXPORTS InitKpHttp Project > Properties... > Linker > Input > Module Definition File 里面加入你刚才的KpHttps.def文件,重新编译就行了。出来的InitKpHttp函数前面没有下划线,后面没有@8或者@ABCDEF之类的。 注意事项二: 用C++Builder的implib工具生成DLL对应的lib文件。如:implib xx.lib xxx.dll。 生成lib文件之后,C++Builder便可以使用这个lib文件了。 注意事项三: 文件头的声明应该完全一样,否则(呵呵),会出现链接错误。 #ifdef DLL_API #define DLL_API extern "C" _declspec(dllexport) #else #define DLL_API extern "C" _declspec(dllimport) #endif #ifdef __cplusplus extern "C" { #endif DECLDIR int __stdcall InitKpHttp(void); DECLDIR int UnInitKpHttp(void); DECLDIR int KpHttpRequest(char *strurl,char *strhost,char *strresult,int &resultle;); DECLDIR int KpHttpsRequest(char *strurl,char *strhost,char *strresult,int &resultle;); DECLDIR int KpHttpPost(char *strurl,char *strhost,char *strPost,int postlen,char *strresult,int &resultle;); DECLDIR int KpHttpsPost(char *strurl,char *strhost,char *strPost,int postlen,char *strresult,int &resultle;); DECLDIR int KpUpLoadFile(char *strurl,char *strhost,char *filebuf,int filelen,char *strresult,int &resultle;); DECLDIR int KpDownLoadFile(char *strurl,char *strhost,char *filebuf,int &filelen;,char *strresult,int &resultle;); #ifdef __cplusplus } #endif
### 回答1: bcb6.0出现[linker error] unresolved external 'freeimage_getpixelcolor' referenc的错误是由于在链接找不到程序中使用的freeimage_getpixelcolor函数的定义。这个错误一般是由以下几种情况引起的: 1. 函数名拼写错误:请检查程序中对freeimage_getpixelcolor函数的调用是否和函数的定义保持一致。检查函数名称的大小写、拼写和参数是否匹配。 2. 函数未被包含:如果在程序中调用了freeimage_getpixelcolor函数,而该函数的定义却未被包含在编译的文件中,则会出现链接错误。请确保相关的头文件已经正确地包含到源文件中。 3. 函数定义缺失:如果缺少对freeimage_getpixelcolor函数的定义,编译器就无法生成对该函数的调用。在这种情况下,需要检查是否正确地引入了对FreeImage库的链接,并且库文件的路径是否正确配置。 4. 编译器版本不兼容:某些函数在不同版本的编译器中可能有所不同。请确保所使用的FreeImage库与编译器版本兼容,并且库文件是否正确配置。 综上所述,出现[linker error] unresolved external 'freeimage_getpixelcolor' referenc错误的原因可能是函数名拼写错误、函数未被包含、函数定义缺失或编译器版本不兼容。请仔细检查相关的代码和配置,并按照上述步骤进行排查和修复。 ### 回答2: 该错误是指在使用BCB6.0编译,链接程序发生了错误,未能解决external 'freeimage_getpixelcolor'的引用。 这个错误通常是由于编译器找不到对应的函数或模块所致。在这种情况下,可能是由于以下原因导致的链接错误: 1. 函数未被正确声明或定义:编译器无法找到函数的声明或定义,因此无法解析对该函数的引用。解决方法是确保在使用该函数之前已经正确声明或定义。 2. 缺少链接库:使用的函数可能在一个外部链接库中,但编译器无法找到该库。解决方法是在编译选项中添加链接库所在的路径,或者手动将链接库添加到项目中。 3. 链接库版本不匹配:使用的函数可能来自一个不兼容的链接库版本,导致编译器无法解析引用。解决方法是确保使用的链接库与编译器兼容,并且正确链接到项目中。 4. 函数命名错误:函数的名称可能被错误拼写或命名不一致,导致编译器无法找到正确的符号。解决方法是检查函数的名称,并确保在使用拼写正确。 总之,要解决这个链接错误,需要检查函数的声明或定义、链接库的路径和版本以及函数名称的正确性。通过排查以上可能的原因,可以找到并解决该错误,使得程序能够成功编译和链接。 ### 回答3: "bcb6.0 [linker error] unresolved external 'freeimage_getpixelcolor' referenc" 是指在Borland C++ Builder 6.0编译过程中出现了一个链接错误,无法找到名为‘freeimage_getpixelcolor’的外部引用。 可能的原因是您在代码中引用了'freeimage_getpixelcolor'函数,但编译器无法找到与之对应的函数定义。 要解决这个问题,您可以尝试以下几个步骤: 1. 确保您在代码中正确地包含了相关的头文件。查看包含的头文件是否正确,并且路径设置正确。 2. 检查您是否正确地链接了相关的库文件。在Borland C++ Builder中,您可以在项目选项中的“链接器”部分添加所需的库文件。 3. 确保库文件的路径设置正确,以便编译器可以找到它们。检查库文件是否存在并位于正确的位置。 4. 检查函数名是否正确拼写。如果函数名拼写不正确,编译器将无法找到对应的函数定义。 如果您仍然无法解决这个链接错误,可能需要进一步检查代码和相关的库文件,或者尝试与其他开发者沟通,以获得更多帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值