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 toshm_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をチェックし、両方の
場合、shm_open
オブジェクトをshm_unlink
が
'記号が定義されていない' に属して見つけてきました前もって感謝します。
リンクエラーが発生しました。あなたを助ける失敗したリンケージコマンドを見る必要があります。あなたの質問の本文に、未編集の完全なビルドログを投稿してください。 –