【问题标题】:Poco RWLock - Undefined reference to 'pthread_rwlock_wrlock@@GLIBC_2.2.5Poco RWLock - 对'pthread_rwlock_wrlock@@GLIBC_2.2.5 的未定义引用
【发布时间】:2014-11-02 19:43:47
【问题描述】:

我正在 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 包含、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'

我哪里错了?

问候。

【问题讨论】:

  • -pthread代替-lpthread?
  • 嗨@yohjp,你是对的!

标签: c++ gcc pthreads poco-libraries


【解决方案1】:

如果你使用 CMake,你可以这样做:

...
find_package(Threads)
...

target_link_libraries(
    ...
    ${CMAKE_THREAD_LIBS_INIT}
)

【讨论】:

    猜你喜欢
    • 2016-03-12
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 2013-04-21
    • 2014-07-11
    • 2020-11-19
    相关资源
    最近更新 更多