JG.Shi 发表于 2012-11-24 15:28:56

ACE 在UNICODE 版本引用时有问题, 请帮忙

出现 "无法解析的外部符号" 这样的错误, 不知道是什么情况导致, 查了很多资料未能找到, 只能发帖求助了.

我的环境是WIN7 + VS2010 + ACE6.1.6

1. config.h 内容如下:
#ifdef _UNICODE
#define ACE_HAS_WCHAR
#endif//_UNICODE
#define ACE_HAS_MFC 1
#include "ace/config-win32.h"

2. ACE 项目配置 为 "使用 Unicode 字符集"

3. 环境变量为
ACE_ROOT = D:\ACE_wrappers
PATH = %ACE_ROOT%\lib


4. 测试工程为 ACE包中的自带例子 "Log_Msg_Test_Callback"
    1)项目配置 "字符集" 改为: "使用 Unicode 字符集"
    2)在test_callback.cpp中添加一行宏定义如下:
#define ACE_USES_WCHAR

#include "ace/OS_main.h"
#include "ace/Log_Msg.h"


编译生成 ACE时成功, 编译Log_Msg_Test_Callback时, 出现"无法解析的外部符号"错误;
错误信息如下:

1>------ 已启动生成: 项目: Log_Msg_Test_Callback, 配置: Debug Win32 ------
1>test_callback.cpp
1>
1>正在搜索库
1>      正在搜索 ..\..\lib\ACEd.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\iphlpapi.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\kernel32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\user32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\gdi32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\winspool.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\comdlg32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\advapi32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\shell32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\ole32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\oleaut32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\uuid.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\odbc32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\odbccp32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\lib\mfc100ud.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\lib\mfcs100ud.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\msvcrtd.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\msimg32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\comctl32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\shlwapi.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\windowscodecs.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\lib\atlsd.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\ws2_32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\mswsock.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\netapi32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\msvcprtd.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\OLDNAMES.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\wininet.lib:
1>      正在搜索 ..\..\lib\ACEd.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\iphlpapi.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\kernel32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\user32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\gdi32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\winspool.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\comdlg32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\advapi32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\shell32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\ole32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\oleaut32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\uuid.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\odbc32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\odbccp32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\lib\mfc100ud.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\lib\mfcs100ud.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\msvcrtd.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\msimg32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\comctl32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\shlwapi.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\windowscodecs.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\lib\atlsd.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\ws2_32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\mswsock.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\netapi32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\msvcprtd.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\OLDNAMES.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\wininet.lib:
1>      正在搜索 ..\..\lib\ACEd.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\iphlpapi.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\kernel32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\user32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\gdi32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\winspool.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\comdlg32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\advapi32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\shell32.lib:
1>      正在搜索 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\ole32.lib:
1>
1>已完成库搜索
1>test_callback.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: int __thiscall ACE_Log_Record::format_msg(wchar_t const * const,unsigned long,wchar_t *)" (__imp_?format_msg@ACE_Log_Record@@QAEHQB_WKPA_W@Z),该符号在函数 "public: virtual void __thiscall Logger::log(class ACE_Log_Record &)" (?log@Logger@@UAEXAAVACE_Log_Record@@@Z) 中被引用
1>test_callback.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: wchar_t const * __thiscall ACE_Log_Msg::local_host(void)const " (__imp_?local_host@ACE_Log_Msg@@QBEPB_WXZ),该符号在函数 "public: virtual void __thiscall Logger::log(class ACE_Log_Record &)" (?log@Logger@@UAEXAAVACE_Log_Record@@@Z) 中被引用
1>test_callback.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: wchar_t const * __thiscall ACE_Log_Record::msg_data(void)const " (__imp_?msg_data@ACE_Log_Record@@QBEPB_WXZ),该符号在函数 "public: virtual void __thiscall Logger::log(class ACE_Log_Record &)" (?log@Logger@@UAEXAAVACE_Log_Record@@@Z) 中被引用
1>test_callback.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) int __cdecl ace_os_wmain_i(class ACE_Main_Base &,int,wchar_t * * const)" (__imp_?ace_os_wmain_i@@YAHAAVACE_Main_Base@@HQAPA_W@Z),该符号在函数 _wmain 中被引用
1>.\test_callback.exe : fatal error LNK1120: 4 个无法解析的外部命令
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

JG.Shi 发表于 2012-11-24 22:44:34

问题已经解决, 在网上查找了那么多, 没有关于这个问题的答案, 看来要么是使用MBCS的人比较多, 要么就是这个问题被我撞见了。
核心就是: ACE 有三种模式, 一 不支持UNICODE, 二 标准模式, 三 完全支持模式
在此感谢我的好友碧哥的顶力支持。

winston 发表于 2012-11-25 20:21:44

其实这种问题,我已经早找到了规律:
http://www.acejoy.com/thread-1065-1-1.html
http://www.acejoy.com/thread-312-1-1.html
页: [1]
查看完整版本: ACE 在UNICODE 版本引用时有问题, 请帮忙