Æle*_*lex 4 linker-errors unicode-string icu static-linking gcc4.7
我正在尝试编译我已经声明为类成员的项目:
icu::UnicodeString label;
icu::UnicodeString tags;
icu::UnicodeString domain;
icu::UnicodeString data;
Run Code Online (Sandbox Code Playgroud)
包括之后(是的,它被发现)
#include <unicode/unistr.h>
Run Code Online (Sandbox Code Playgroud)
在我的CMakeLists.txt中,它搜索,查找和链接:icuuc icudata(libicuuc,libicudata),如输出在抛出错误之前所建议的:
-o icarus -rdynamic -lPocoNet -lPocoUtil -lPocoXML -licuuc -licudata
我已经从源icu4c 50.1.2构建和安装,并在/ usr/local/*下安装了cmake正确查找库,因为我的错误来自链接阶段:
未定义的引用
icu_50::UnicodeString::UnicodeString()' undefined reference toicu_50 :: UnicodeString :: ~UnicodeString()'
我在Debian Wheezy上使用gcc-4.7.2并启用-std = c ++ 0x.完全相同的代码昨晚用Debian Squeeze上的gcc-4.3.2和相同的标志进行编译!
我不能为我的生活,弄清楚我做错了什么!请帮忙!
在构建ICU4C时,这似乎是我的错.我将留下一个简短的解释,因为我已经看到很多谷歌帖子,但没有答案.如果在配置icu时仔细阅读了文档,则说明您应该执行以下操作:
1)将namespace命名为false:
# ifndef U_USING_ICU_NAMESPACE
-# define U_USING_ICU_NAMESPACE 1
+ // Set to 0 to force namespace declarations in ICU usage.
+# define U_USING_ICU_NAMESPACE 0
Run Code Online (Sandbox Code Playgroud)
2)在linux上构建时,我选择了一个非共享的静态库:
runConfigureICU Linux --enable-static --disable-shared
Run Code Online (Sandbox Code Playgroud)
3)这是导致我的错误的重要部分:
默认情况下,ICU库入口点名称具有ICU版本后缀.关闭它以进行系统级安装,以便在不破坏应用程序的情况下升级ICU.例如:
runConfigureICU Linux --disable-renaming
Run Code Online (Sandbox Code Playgroud)
必须安装此配置的公共头文件,以便应用程序包含并获取正确的入口点名称.
我在Squeeze上做了这个,但在Wheezy上没有,因此在系统范围的安装中导致所有链接错误.经验教训,希望它能帮助别人.
| 归档时间: |
|
| 查看次数: |
3303 次 |
| 最近记录: |