2016-08-04 65 views
0

我正在使用emcc/em++,試圖鏈接幾個LLVM字節代碼,但其中一些失敗。如何列出em ++找到的所有符號?

$ em++ -std=c++11 \ 
-o _assimp.js \ 
-O2 \ 
--memory-init-file 0 \ 
-I../include \ 
code/CMakeFiles/assimp.dir/*.o \ 
code/CMakeFiles/assimp.dir/__/contrib/ConvertUTF/*.o \ 
code/CMakeFiles/assimp.dir/__/contrib/unzip/unzip.c.o \ 
../port/emscripten/emassimp.cpp 

問題是它說有幾個符號找不到。

warning: unresolved symbol: inflateEnd 
warning: unresolved symbol: _ZN6Assimp3FBX6ObjectC2EyRKNS0_7ElementERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE 
warning: unresolved symbol: inflateInit_ 
warning: unresolved symbol: _ZN6Assimp3FBX6ObjectD2Ev 
warning: unresolved symbol: inflate 

似乎象徵inflate沒有得到解決,但它在一定unzip.c.o存在。

$ file unzip.c.o 
unzip.c.o: LLVM IR bitcode 
$ llvm-nm unzip.c.o 
     U crc32 
-------- t decrypt_byte 
     U fill_fopen_filefunc 
     U free 
     U get_crc_table 
     U inflate 
     U inflateEnd 
     U inflateInit2_ 
-------- t init_keys 
     U malloc 
     U strcmp 
-------- t strcmpcasenosensitive_internal 
     U strlen 
-------- T unzClose 
-------- T unzCloseCurrentFile 
-------- T unzGetCurrentFileInfo 
-------- T unzGetFilePos 
-------- T unzGetGlobalComment 
-------- T unzGetGlobalInfo 
-------- T unzGetLocalExtrafield 
-------- T unzGetOffset 
-------- T unzGoToFilePos 
-------- T unzGoToFirstFile 
-------- T unzGoToNextFile 
-------- T unzLocateFile 
-------- T unzOpen 
-------- T unzOpen2 
-------- T unzOpenCurrentFile 
-------- T unzOpenCurrentFile2 
-------- T unzOpenCurrentFile3 
-------- T unzOpenCurrentFilePassword 
-------- T unzReadCurrentFile 
-------- T unzSetOffset 
-------- T unzStringFileNameCompare 
-------- D unz_copyright 
-------- T unzeof 
-------- t unzlocal_CheckCurrentFileCoherencyHeader 
-------- t unzlocal_DosDateToTmuDate 
-------- t unzlocal_GetCurrentFileInfoInternal 
-------- t unzlocal_SearchCentralDir 
-------- t unzlocal_getByte 
-------- t unzlocal_getLong 
-------- t unzlocal_getShort 
-------- T unztell 
-------- t update_keys 

其實,有沒有什麼方法可以看到em++作爲符號解決了什麼問題?如果我能理解爲什麼underakip.o中的符號被em++忽略的原因會更好。

+1

'U inflate'表示該符號被引用但未定義。 –

回答

1

llvm-nm的輸出清楚地表明這個文件沒有符號。

嘗試對項目創建的所有對象文件執行llvm-nm,以確保您已定義這些缺少的符號。使用grep可以提供幫助。

相關問題