1

バイナリの実行に問題があります。プログラムがセグメンテーション違反を受信して​​います。フィルタリングは gdb の出力です

gdb a.out

(gdb) run
Starting program: a.out

Program received signal SIGSEGV, Segmentation fault.
0x00000001 in ?? ()
(gdb)

次に、nmユーティリティを使用しました

nm -u a.out
      U Allocatememory

多くのシンボルが未定義であることがわかりました。この a.out バイナリは、実際には他の多くの .so をリンクすることによって取得されます。.soの1つでnmを実行しました

nm libmylib.so
00000000000de6f  T Allocate memory

このプログラムは、上記の libmylib.so とリンクされています。リンク中にエラーは発生しません。

g++ -m32  -shared -Wl -o a.out -lmylib 

ただし、-shared オプションがないと、次のエラーが発生します。

/usr/bin/ld: <path_to_bin>/a.out: hidden symbol `__dso_handle' in 
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/32/crtbegin.o is referenced by DSO
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: ld returned 1 exit status
*** Error code 1

何が問題なのですか?これを克服する方法を教えてもらえますか?前もって感謝します

4

1 に答える 1

1

g++ -m32 -shared -Wl -o a.out -lmylib

これにより、 という名前の共有ライブラリが構築されa.outます。そうしないでください: 共有ライブラリは直接実行できません。

代わりにこれを行う必要があります。

g++ -m32 main.cc -o a.out -lmylib

wheremain.ccには実際のmain機能が含まれています。

于 2012-12-30T05:55:00.113 に答える