Poco RWLock - 未定义对'pthread_rwlock_wrlock@@GLIBC_2.2.5的引用

Poco RWLock - Undefined reference to 'pthread_rwlock_wrlock@@GLIBC_2.2.5

本文关键字:wrlock@@GLIBC rwlock 引用 pthread RWLock 未定义 Poco      更新时间:2023-10-16

我正在Ubuntu 14.04 x64上构建一个守护程序应用程序,我收到一个链接器错误:

undefined reference to symbol 'pthread_rwlock_wrlock@@GLIBC_2.2.5'

代码是

#include <Poco/RWLock.h>
class DatabaseHandler
{
public:
  typedef std::shared_ptr<DatabaseHandler> Ptr;
  DatabaseHandler() {};
  virtual ~DatabaseHandler() {};
  virtual bool Connect(const STRING& connstring);
  bool Disconnect();
  BOOL IsConnected() {
    return (m_pSession && m_pSession->isConnected());
  }
protected:
  std::unique_ptr<Poco::Data::Session> m_pSession;
  Poco::RWLock m_write_lock;
};

class FADatabaseHandler : public DatabaseHandler
{
public:
  EDBReturnValues UpdateHouse(TFAData& data);
private:
  BOOL HouseExists(const UINT HouseId);
};

以及实施。。

EDBReturnValues FADatabaseHandler::UpdateHouse(TFAData& data)
{
  Poco::ScopedWriteRWLock lock(m_write_lock);
  .....
}

此文件的编译器命令行是

g++ -Wall -fexceptions -std=c++11 -g -lrt -lm -lpthread -DPOCO_STATIC -DPOCO_NO_AUTOMATIC_LIBS -DUSING_POCO_LIB -DBUILD_AS_SERVER -I/usr/local/mysql/include -c /home/daniele/src/TBServer/FADatabaseHandler.cpp -o obj/Debug/FADatabaseHandler.o

如果我注释RWLock.h include、m_write_lock和ScopedWriteRWLock调用,我会在中得到错误

/usr/bin/ld: /usr/local/lib/libPocoFoundationd.a(TextEncoding.o): undefined reference to symbol 'pthread_rwlock_wrlock@@GLIBC_2.2.5'

我哪里错了?

谨致问候。

如果您使用CMake,您可以执行以下操作:

...
find_package(Threads)
...
target_link_libraries(
    ...
    ${CMAKE_THREAD_LIBS_INIT}
)