pthread 互斥锁:错误 LNK2019:无法解析的外部符号 c++

问题描述 投票:0回答:4

我收到此链接错误,但找不到解决方案。你能帮我找到正确的搜索方向吗? 我得到: error LNK2019: 无法解析的外部符号 _imp_pthread_mutex_lock 在函数“private: bool __thiscall... 中引用...这里是带有参数的函数的完整名称。 pthread_mutex_lockpthread_mutex_unlock 在此函数中使用(不作为参数)。 包含“pthread.h”不会改变任何东西。

c++ locking pthreads
4个回答
3
投票

我使用了 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 开始工作。


2
投票

pthread
库适用于 POSIX 系统(Linux、BSD、Mac OS)。您表示您使用的是 Windows 中的 Visual Studio - 如果您希望在 Windows 上执行多线程处理,请参阅此页

更好的是,如果您可以使用更新的工具,C++11 提供内置线程功能


0
投票

您需要添加

-lpthread

-lthread

到您的编译器命令行(取决于操作系统和编译器)

更新:@nos 正确指出这似乎是 MS 链接器错误。您不应该在 Visual Studio 中使用 pthread。 Windows 线程 API 非常不同。


0
投票

如果您正在编译自己的共享库,则问题在于您已定义 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"

© www.soinside.com 2019 - 2024. All rights reserved.