碰到一个类似上述的问题,感觉还是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
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 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) |