您的位置:首页 > 其它

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中加入该类库。

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, 搞定!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: