我收到此链接错误,但找不到解决方案。你能帮我找到正确的搜索方向吗? 我得到: error LNK2019: 无法解析的外部符号 _imp_pthread_mutex_lock 在函数“private: bool __thiscall... 中引用...这里是带有参数的函数的完整名称。 pthread_mutex_lock 和 pthread_mutex_unlock 在此函数中使用(不作为参数)。 包含“pthread.h”不会改变任何东西。
我使用了 pthread-win32,可从 sourceware.org/pthreads-win32获得。
我已经面对这个问题几个小时了,终于能够通过在 Visual Studio 依赖项安装文件夹中的相应文件夹中添加下载时提供的“lib”、“include”和“bin”文件夹内容来修复它.
我的在
“C:\Program Files (x86)\Microsoft Visual Studio�7\社区\VC\工具\MSVC .10.25017"
然后我添加了库依赖项“pthreadVC2.lib;”在
项目 -> 属性 -> 链接器 -> 输入 -> 附加依赖项
瞧! pthreads 开始工作。
您需要添加
-lpthread
或
-lthread
到您的编译器命令行(取决于操作系统和编译器)
更新:@nos 正确指出这似乎是 MS 链接器错误。您不应该在 Visual Studio 中使用 pthread。 Windows 线程 API 非常不同。
如果您正在编译自己的共享库,则问题在于您已定义 DLL_EXPORT 或将 -DDLL_EXPORT 放在编译行上。深层(系统)依赖关系正在触发此宏并定义这些 __imp__blah_blah 符号。
问题:
$ x86_64-w64-mingw32-g++ -std=c++17 -O2 -fvisibility=hidden -c xxx.cpp -DDLL_EXPORT -DPIC -o .libs/xxx.o
$ nm .libs/libnexa_la-random2.o | grep pthread
U __imp_pthread_mutex_destroy
U __imp_pthread_mutex_init
U __imp_pthread_mutex_lock
U __imp_pthread_mutex_unlock
工作(这些将在与 pthreads 链接时解决):
$ x86_64-w64-mingw32-g++ -std=c++17 -O2 -fvisibility=hidden -c xxx.cpp -DPIC -o .libs/xxx.o
$ nm .libs/libnexa_la-random2.o | grep pthread
U pthread_mutex_destroy
U pthread_mutex_init
U pthread_mutex_lock
U pthread_mutex_unlock
如果这是一个 autoconf 项目,您需要从 libtool 中获取此标志的声明。有两种方法可以做到这一点:
sed -i 's/-DDLL_EXPORT //g' libtool
或者在configure.ac中:
lt_cv_prog_compiler_pic="-DPIC" lt_cv_prog_compiler_pic_CXX="-DPIC"