C++Builder12 FMX项目Release编译报错:未解析外部符号IdnToAscii
解决C++Builder 12 FMX Release模式下TIPAddress::Create链接错误(IdnToAscii未解析)
问题背景
调用TIPAddress::Create(L"192.168.99.3")这个宽字符直接传入的重载版本时,Release模式编译出现链接错误:
[ilink64 Error] Error: Unresolved external 'IdnToAscii' referenced from C:\SOFT\EMBARCADERO\STUDIO\23.0\LIB\WIN64\RELEASE\RTL.A|System.Net.Socket.o
Debug模式或使用其他Create重载(比如传入UnicodeString)时编译正常。
原因分析
IdnToAscii是Windows系统中处理国际化域名(IDN)转换的API,属于normaliz.lib库。Release模式下,C++Builder的RTL(运行时库)没有自动链接该库,而Debug模式的RTL调试版本默认包含了相关依赖,因此不会触发错误。
解决方案
方案1:手动链接normaliz.lib库
- 打开项目选项(菜单栏
Project > Options) - 切换到C++ Linker选项卡
- 在Additional libraries to link输入框中添加
normaliz.lib(确保当前配置是Win64 Release) - 保存设置后重新编译
方案2:代码中强制链接库
在调用TIPAddress::Create的cpp文件开头添加编译指令:
#pragma comment(lib, "normaliz.lib")
方案3:改用兼容的重载版本
将宽字符直接传入改为先转换为UnicodeString再调用对应重载,绕开对IdnToAscii的依赖:
System::Net::Socket::TIPAddress::Create(System::UnicodeString(L"192.168.99.3"));
内容的提问来源于stack exchange,提问作者d7d1cd
相关产品推荐
相关产品推荐

