GNU/Linux >> Linux の 問題 >  >> Linux

Linux c++ エラー:'dlopen' への未定義の参照

libdl にリンクし、追加する必要があります

<ブロック引用>

-ldl

リンカー オプションに


プロジェクトをコンパイルするために CMake を使用していましたが、同じ問題が見つかりました。

${CMAKE_DL_LIBS} を target_link_libraries() 呼び出しに追加するだけです


@Masci は正しいですが、C (および gcc を使用している場合) コンパイラ) これが機能しないことを考慮してください:

gcc -ldl dlopentest.c

しかし、これは:

gcc dlopentest.c -ldl

理解するのに少し時間がかかりました...


<ブロック引用>

これは機能しません:

gcc -ldl dlopentest.c

しかし、これは:

gcc dlopentest.c -ldl
<ブロック引用>

確かにこれは厄介な「機能」の 1 つです

ヒアドキュメント構文を書くときに苦労していて、いくつかの興味深い事実を見つけました . CC=Clang で 、これは機能します:

$CC -ldl -x c -o app.exe - << EOF
#include <dlfcn.h>
#include <stdio.h>
int main(void)
{
  if(dlopen("libc.so.6", RTLD_LAZY | RTLD_GLOBAL))
    printf("libc.so.6 loading succeeded\n");
  else
    printf("libc.so.6 loading failed\n");
  return 0;
}
EOF

./app.exe

これらすべてに加えて:

  • $CC -ldl -x c -o app.exe - << EOF
  • $CC -x c -ldl -o app.exe - << EOF
  • $CC -x c -o app.exe -ldl - << EOF
  • $CC -x c -o app.exe - -ldl << EOF

ただし、CC=gcc では 、最後のバリアントのみが機能します。 -ldl -の後 (標準入力引数シンボル).


Linux
  1. MPIコンパイルエラー: `sqrt'への未定義の参照–解決済み

  2. C++ エラー:'clock_gettime' および 'clock_settime' への未定義の参照

  3. Linux 上の C++/アセンブリ IDE

  1. C、C++ で Windows または Linux を検出

  2. Linux 上の C++ での usleep(0) の効果

  3. C++ Boost:boost::system::generic_category() への未定義の参照

  1. Android Studio エラー 13 =Linux で許可が拒否されました

  2. Linux の IS_ERR() マクロ

  3. Linux で SD カードを初期化中にエラーが発生しました