2017-11-22 35 views
0

POCOでアプリケーションを作成すると、コンパイルエラーに関する奇妙なことが判明しました。POCOで共有メモリを使用するとリンクエラーが発生する

他にも同様の問題をチェックして、-lrtを追加しました。しかし、それはまだ動作しません。

/usr/local/lib//libPocoFoundation.a(SharedMemory.o): In function Poco::SharedMemoryImpl::SharedMemoryImpl(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long, Poco::SharedMemory::AccessMode, void const*, bool)': SharedMemory.cpp:(.text+0x2ab): undefined reference to shm_open' SharedMemory.cpp:(.text+0x31b): undefined reference to shm_unlink' /usr/local/lib//libPocoFoundation.a(SharedMemory.o): In function Poco::SharedMemoryImpl::close()': SharedMemory.cpp:(.text+0x666): undefined reference to `shm_unlink' collect2: error: ld returned 1 exit status Makefile:17: recipe for target 'test' failed make: *** [test] Error 1

魔法のように、私は以下のようなダミー関数を追加してください。

int dummy() 
{ 
    const char *memname = "sample"; 
    const size_t region_size = sysconf(_SC_PAGE_SIZE); 
    int fd = shm_open(memname, O_CREAT | O_TRUNC | O_RDWR, 0666); 
    if (fd == -1) 
     return -1; 
    int r = shm_unlink(memname); 
    if (r != 0) 
     return -1; 
} 

正常に構築されます。

&は、このような奇妙な回避策を避けるために正式版を検索する理由を理解できません。 誰かがそれに助けてもらえますか?

また、私はlibPocoFoundation.aをチェックし、両方の

  1. 場合、shm_open

  2. オブジェクトをshm_unlink

'記号が定義されていない' に属して見つけてきました前もって感謝します。

+0

リンクエラーが発生しました。あなたを助ける失敗したリンケージコマンドを見る必要があります。あなたの質問の本文に、未編集の完全なビルドログを投稿してください。 –

答えて

1

回答ありhere - 問題はリンクライブラリの順番です(より前、-lPocoFoundation)。

関連する問題