小编use*_*488的帖子

DLL中未解决的符号错误

作为背景,我遇到了将中型Linux代码库(编译成巨型.so)移植到x64窗口(编译成.dll).我有连接器问题.

作为一个最小的测试用例,如果我只从以下文件创建一个Visual Studio项目:

#include <Windows.h>
#include <Dbghelp.h>

void do_stuff(char const * s)
{
  char buffer[4096];
  long int len = UnDecorateSymbolName(
    s,
    buffer,
    sizeof(buffer),
    UNDNAME_COMPLETE);
}
Run Code Online (Sandbox Code Playgroud)

我将项目类型设置为DLL并构建它,我收到错误"LNK2001:未解析的外部符号__imp_UnDecorateSymbolName".也就是说,文件正确编译,但无法链接到dll.

我认为目标是我的dll链接到dbghelp.dll,特别是因为(至少在我的系统上)没有像dbghelp.lib这样的文件.那么为什么现在尝试解析该符号,而不是当我的DLL加载到应用程序中时呢?为什么它无论如何都看不到这个功能呢?

为了清楚起见,我已经确认我正在构建x64 DLL,并且C:\ Windows\System32中的dbghelp.dll是x64.

windows linker dbghelp

7
推荐指数
1
解决办法
5086
查看次数

Android NDK链接

我正在尝试构建一个调用C++后端的android应用程序.此后端使用ZeroMQ进行消息传递.根据ZeroMQ指南中的android构建页面,我构建了一个ndk版本6的本机工具链,并使用它来(成功)构建ZeroMQ.

但是,当我使用JNI实现构建自己的.so时,我似乎无法正常加载所有内容.具体来说,如果我调用System.LoadLibrary("zmq"),这成功完成,但如果我然后调用*System.LoadLibrary("my_lib")*我总是得到一个UnsatisfiedLinkError抱怨:

Cannot load library reloc_library[1244]:   29 cannot locate zmq_msg_init'...
Run Code Online (Sandbox Code Playgroud)

libmy_lib.so已经以几种不同的方式生成,每种方式都没有成功.在生成它之后,我总是将libmy_lib.so(以及libzmq.so)复制到我的android项目的文件夹:libs/armeabi /.

# Compile all object files - this part was done for all options
/opt/android-toolchain/bin/arm-linux-androideabi-g++ -fpic -c Client_Events.cpp \
Client Wrapper.cpp jni.cpp -I /opt/android-root/include/ -I /my/project/specific/stuff

# Option 1 - Don't link the lib in at all
/opt/android-toolchain/bin/arm-linux-androideabi-g++ -shared  \
-Wl,-soname,libmy_lib.so -o libmy_lib.so jni.o Client_Events.o Client_Wrapper.o 

# Option 2 - Link ZeroMQ in statically
/opt/android-toolchain/bin/arm-linux-androideabi-g++ -shared  \
-Wl,-soname,libmy_lib.so -o libmy_lib.so jni.o Client_Events.o Client_Wrapper.o \
libzmq.a …
Run Code Online (Sandbox Code Playgroud)

android shared-libraries android-ndk

4
推荐指数
1
解决办法
7846
查看次数