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
-
の後 (標準入力引数シンボル).