xcode下出现Undefined symbols for architecture arm64或者armv7: “_OBJC_CLASS_$_XXX
2015-12-16 09:19
274 查看
碰到一个类似上述的问题,感觉还是stl的C++库加载造成的问题。
即使通过gcc -v查看了编译过程,
然后用gcc -E 导出了预编译后的文件,
查看到的仍然只是std::string,为什么会出现接口中
有的是fucn(std::string)
有的是func(std::__1::basic_string...)
仍然没有搞清楚,网上有一篇似乎可以处理这个问题的文章,如下:
http://blog.csdn.net/kaizi318/article/details/10362673
但是尝试后,发现xcode仍然报错。
通过在后台用nm查看调用。
发现如果用libstdc++库,则需要使用指定头文件,添加头文件路径如下:
-I $(shell $(XCRUN) --show-sdk-path)/usr/include/c++/4.2.1
其对应使用的std::string类型就是std::string。
而若是不指定用libstdc++,而是使用默认的libc++库,则使用的是默认的C++头文件,
其对应使用的std::string变成了std::__1::basic_string(........)之类的
因此,c++头文件使用的不同导致其他使用stl的库的函数签名和实现都不同了
参考文章如下:
Undefined symbols for architecture i386或者armv7:
“_OBJC_CLASS_$_XXX
Undefined symbols for architecture i386:
“_OBJC_CLASS_$_XXX”, referenced
from:
objc-class-ref in XXX
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
如果真机调试就是 undefined symbols for architecture armv7错误!
发生这种错误通常是project.pbxproj这个文件引起的,尤其在多人合作开发的时候,svn提交不规范可能导致project.pbxproj发生错误,导致文件的引用不在project.pbxproj文件中。
xcode项目import文件会根据project.pbxproj来查找,查找不到文件的引用则会有上述的错误。
解决方法点击工程,在主界面中点击Build Phases,根据提示信息“XXX”来判断缺少什么文件,一般如果缺少自定义的文件,XXX会是缺少的类名,那么就在Complie Sources中加入该文件。如果缺少类库,则在Link Binary With Libraries中加入该类库。
看着就非常复杂!
有这么多的link STL的错误。
其实,就是你编译静态库的时候使用不同版本的标准库, C++ Standard Library
那么如何fix掉这个issue呢?看下面这两张图!
如果你这两个在编译静态库和在使用静态库的app中设置的是一样的,应该就可以解决掉这个问题!
事实上,compiler default 足够了。
今天,使用了第三方一个库,结果,出现,iOS Undefined symbols for architecture armv7 std::basic_string<char, std::char_traits<char>
注意:不是修改Build Setting里面的设置,而是添加一个libstdc++.dylib, 搞定!
即使通过gcc -v查看了编译过程,
然后用gcc -E 导出了预编译后的文件,
查看到的仍然只是std::string,为什么会出现接口中
有的是fucn(std::string)
有的是func(std::__1::basic_string...)
仍然没有搞清楚,网上有一篇似乎可以处理这个问题的文章,如下:
http://blog.csdn.net/kaizi318/article/details/10362673
但是尝试后,发现xcode仍然报错。
通过在后台用nm查看调用。
发现如果用libstdc++库,则需要使用指定头文件,添加头文件路径如下:
-I $(shell $(XCRUN) --show-sdk-path)/usr/include/c++/4.2.1
其对应使用的std::string类型就是std::string。
而若是不指定用libstdc++,而是使用默认的libc++库,则使用的是默认的C++头文件,
其对应使用的std::string变成了std::__1::basic_string(........)之类的
因此,c++头文件使用的不同导致其他使用stl的库的函数签名和实现都不同了
参考文章如下:
Undefined symbols for architecture i386或者armv7:
“_OBJC_CLASS_$_XXX
Undefined symbols for architecture i386:
“_OBJC_CLASS_$_XXX”, referenced
from:
objc-class-ref in XXX
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
如果真机调试就是 undefined symbols for architecture armv7错误!
发生这种错误通常是project.pbxproj这个文件引起的,尤其在多人合作开发的时候,svn提交不规范可能导致project.pbxproj发生错误,导致文件的引用不在project.pbxproj文件中。
xcode项目import文件会根据project.pbxproj来查找,查找不到文件的引用则会有上述的错误。
解决方法点击工程,在主界面中点击Build Phases,根据提示信息“XXX”来判断缺少什么文件,一般如果缺少自定义的文件,XXX会是缺少的类名,那么就在Complie Sources中加入该文件。如果缺少类库,则在Link Binary With Libraries中加入该类库。
Undefined symbols for architecture i386: |
02 | "TextureMan::LoadTexture(std::__1::basic_string, std::__1::allocator > const&, int, bool)" , referenced from: |
03 | tolua_gameinterface_TextureMan_loadTexture00(lua_State*) in libCoreClientiOS.a(tolua_gameinterface.o) |
04 | "SoundManager::BgndMusicPlay(std::__1::basic_string, std::__1::allocator > const&, bool)" , referenced from: |
05 | tolua_gameinterface_SoundManager_BgndMusicPlay00(lua_State*) in libCoreClientiOS.a(tolua_gameinterface.o) |
06 | "SoundManager::BgndMusicStop(std::__1::basic_string, std::__1::allocator > const&, bool)" , referenced from: |
07 | tolua_gameinterface_SoundManager_BgndMusicStop00(lua_State*) in libCoreClientiOS.a(tolua_gameinterface.o) |
08 | "Font::LoadFont(std::__1::basic_string, std::__1::allocator > const&)" , referenced from: |
09 | tolua_gameinterface_Font_loadFont00(lua_State*) in libCoreClientiOS.a(tolua_gameinterface.o) |
10 | "System::MakeDocumentPath(std::__1::basic_string, std::__1::allocator > const&) const" , referenced from: |
11 | tolua_gameinterface_System_makeDocumentPath00(lua_State*) in libCoreClientiOS.a(tolua_gameinterface.o) |
12 | "System::MakeResourcePath(std::__1::basic_string, std::__1::allocator > const&) const" , referenced from: |
13 | ExUnit::LogicThread::Run() in libCoreClientiOS.a(logicthread.o) |
14 | tolua_gameinterface_System_makeResourcePath00(lua_State*) in libCoreClientiOS.a(tolua_gameinterface.o) |
15 | "std::__1::__vector_base_common::__throw_length_error() const" , referenced from: |
16 | void std::__1::vector >::__push_back_slow_path(float const&&&) in libCoreClientiOS.a(tolua_gameinterface.o) |
17 | void std::__1::vector, std::__1::allocator > >::__push_back_slow_path const&>(std::__1::basic_string, std::__1::allocator > const&&&) in libCoreClientiOS.a(tolua_gameinterface.o) |
18 | void std::__1::vector >::__push_back_slow_path(int const&&&) in libCoreClientiOS.a(tolua_gameinterface.o) |
19 | "std::__1::locale::use_facet(std::__1::locale::id&) const" , referenced from: |
20 | std::__1::basic_ostream >& std::__1::endl >(std::__1::basic_ostream >&) in libCoreClientiOS.a(logicthread.o) |
21 | "std::__1::ios_base::getloc() const" , referenced from: |
22 | std::__1::basic_ostream >& std::__1::endl >(std::__1::basic_ostream >&) in libCoreClientiOS.a(logicthread.o) |
23 | "std::__1::basic_string, std::__1::allocator >::__init(char const*, unsigned long)" , referenced from: |
24 | _l_registercallback in libCoreClientiOS.a(logicthread.o) |
25 | _luapanic in libCoreClientiOS.a(logicthread.o) |
26 | ExUnit::LogicThread::Run() in libCoreClientiOS.a(logicthread.o) |
27 | ExUnit::LogicThread::HandleError() in libCoreClientiOS.a(logicthread.o) |
28 | ExUnit::LogicThread::CallVA(char const*, char const*, ...) in libCoreClientiOS.a(logicthread.o) |
29 | ExUnit::LogicThread::RemoveCallback(char const*) in libCoreClientiOS.a(logicthread.o) |
30 | ExUnit::LogicThread::SetCallback(char const*, int) in libCoreClientiOS.a(logicthread.o) |
31 | ... |
32 | "std::__1::basic_string, std::__1::allocator >::assign(char const*)" , referenced from: |
33 | System::SetEngineScriptPath(char const*) in libCoreClientiOS.a(tolua_gameinterface.o) |
34 | "std::__1::basic_string, std::__1::allocator >::basic_string(std::__1::basic_string, std::__1::allocator > const&)" , referenced from: |
35 | tolua_gameinterface_vector_string___geti00(lua_State*) in libCoreClientiOS.a(tolua_gameinterface.o) |
36 | tolua_gameinterface_vector_string___geti01(lua_State*) in libCoreClientiOS.a(tolua_gameinterface.o) |
37 | tolua_gameinterface_vector_string__push_back00(lua_State*) in libCoreClientiOS.a(tolua_gameinterface.o) |
38 | void std::__1::vector, std::__1::allocator > >::__push_back_slow_path const&>(std::__1::basic_string, std::__1::allocator > const&&&) in libCoreClientiOS.a(tolua_gameinterface.o) |
39 | "std::__1::basic_string, std::__1::allocator >::~basic_string()" , referenced from: |
40 | _l_registercallback in libCoreClientiOS.a(logicthread.o) |
41 | _luapanic in libCoreClientiOS.a(logicthread.o) |
42 | ExUnit::LogicThread::Run() in libCoreClientiOS.a(logicthread.o) |
43 | ExUnit::LogicThread::HandleError() in libCoreClientiOS.a(logicthread.o) |
44 | ExUnit::LogicThread::CallVA(char const*, char const*, ...) in libCoreClientiOS.a(logicthread.o) |
45 | ExUnit::LogicThread::RemoveCallback(char const*) in libCoreClientiOS.a(logicthread.o) |
46 | ExUnit::LogicThread::SetCallback(char const*, int) in libCoreClientiOS.a(logicthread.o) |
47 | ... |
48 | "std::__1::basic_string, std::__1::allocator >::operator=(std::__1::basic_string, std::__1::allocator > const&)" , referenced from: |
49 | tolua_gameinterface_vector_string___seti00(lua_State*) in libCoreClientiOS.a(tolua_gameinterface.o) |
50 | "std::__1::basic_ostream >::put(char)" , referenced from: |
51 | std::__1::basic_ostream >& std::__1::endl >(std::__1::basic_ostream >&) in libCoreClientiOS.a(logicthread.o) |
52 | "std::__1::basic_ostream >::flush()" , referenced from: |
53 | std::__1::basic_ostream >& std::__1::endl >(std::__1::basic_ostream >&) in libCoreClientiOS.a(logicthread.o) |
54 | "std::__1::basic_ostream >::sentry::sentry(std::__1::basic_ostream >&)" , referenced from: |
55 | std::__1::basic_ostream >& std::__1::operator<<<std::__1::char_traits >(std::__1::basic_ostream >&, char const*) in libCoreClientiOS.a(logicthread.o) |
56 | "std::__1::basic_ostream >::sentry::~sentry()" , referenced from: |
57 | std::__1::basic_ostream >& std::__1::operator<<<std::__1::char_traits >(std::__1::basic_ostream >&, char const*) in libCoreClientiOS.a(logicthread.o) |
58 | "std::__1::cerr" , referenced from: |
59 | ExUnit::LogicThread::Run() in libCoreClientiOS.a(logicthread.o) |
60 | ExUnit::LogicThread::ContactTriggered(b2Contact*) in libCoreClientiOS.a(logicthread.o) |
61 | ExUnit::LogicThread::SensorTriggered(b2Contact*) in libCoreClientiOS.a(logicthread.o) |
62 | "std::__1::ctype::id" , referenced from: |
63 | std::__1::basic_ostream >& std::__1::endl >(std::__1::basic_ostream >&) in libCoreClientiOS.a(logicthread.o) |
64 | "std::__1::locale::~locale()" , referenced from: |
65 | std::__1::basic_ostream >& std::__1::endl >(std::__1::basic_ostream >&) in libCoreClientiOS.a(logicthread.o) |
66 | "std::__1::ios_base::__set_badbit_and_consider_rethrow()" , referenced from: |
67 | std::__1::basic_ostream >& std::__1::operator<<<std::__1::char_traits >(std::__1::basic_ostream >&, char const*) in libCoreClientiOS.a(logicthread.o) |
68 | "std::__1::ios_base::clear(unsigned int)" , referenced from: |
69 | std::__1::basic_ostream >& std::__1::operator<<<std::__1::char_traits >(std::__1::basic_ostream >&, char const*) in libCoreClientiOS.a(logicthread.o) |
70 | ld: symbol(s) not found for architecture i386 |
71 | clang: error: linker command failed with exit code 1 (use - v to see invocation) |
有这么多的link STL的错误。
其实,就是你编译静态库的时候使用不同版本的标准库, C++ Standard Library
那么如何fix掉这个issue呢?看下面这两张图!
如果你这两个在编译静态库和在使用静态库的app中设置的是一样的,应该就可以解决掉这个问题!
事实上,compiler default 足够了。
iOS出现 Undefined symbols
for architecture armv7 std::basic_string<char, std::char_traits<char>
分类: iOS |2013-07-18
16:49 |42人阅读
今天,使用了第三方一个库,结果,出现,iOS Undefined symbols for architecture armv7 std::basic_string<char, std::char_traits<char>注意:不是修改Build Setting里面的设置,而是添加一个libstdc++.dylib, 搞定!
相关文章推荐
- AssignVar
- TCP/IP(1)-基本概念
- WebSocket
- iOS03-UIView用户交互相关的属性和方法
- js的常用函数,自定义对象,内置对象
- 携手滴滴玩跨界,vivo将“快“玩到极致
- 位运算符
- 值得推荐的C/C++框架和库 (真的很强大)
- iOS02 UILable和UITextFiled的自定义
- 《Web全栈工程师的自我修养》读书笔记
- 图像处理算法基础(六)---sobel算子自实现与opencv对比
- MySql查询时间段的方法
- OperationDemo2
- 过一天不登QQ的生活
- iOS01 计算器
- Offending RSA key in /Users/liuhang/.ssh/known_hosts:7
- Android Studio(IntelliJ IDEA)使用笔记
- httpd-vhosts.conf配置文件理解
- Android内存优化杂谈
- mysql查询今天、昨天、7天、近30天、本月数据