代码之家  ›  专栏  ›  技术社区  ›  Izumi Kawashima

如何列出em++找到的所有符号?

  •  0
  • Izumi Kawashima  · 技术社区  · 8 年前

    我正在使用 emcc / em++ ,尝试链接多个LLVM字节码,但其中一些失败。

    $ 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
    

    事实上,有什么办法可以看看 电子邮箱++ 已解析为符号?如果我能理解unzip.c.o中的符号被忽略的原因,那就更好了 电子邮箱++ .

    1 回复  |  直到 8 年前
        1
  •  1
  •   Tarun Gehlaut    8 年前

    尝试对项目创建的所有对象文件执行llvm-nm,以确保您有这些丢失符号的定义。使用grep会有所帮助。