独自のバージョン番号を表示するために独立して実行できる共有ライブラリを開発しています。実行可能な共有ライブラリから浮動小数点数を出力できません
私は、カスタムのエントリー・ポイント定義しました:
const char my_interp[] __attribute__((section(".interp"))) = "/lib64/ld-linux-x86-64.so.2";
void my_main() {
printf("VERSION: %d\n", 0);
_exit(0);
}
を、私は
gcc -o list.os -c -g -Wall -fPIC list.c
gcc -o liblist.so -g -Wl,-e,my_main -shared list.os -lc
がと実行完璧をコンパイルし、このコードをコンパイルします。
私の問題は、printfのパラメータをfloatまたはdouble(%fまたは%lf)に変更したときです。ライブラリーはコンパイルされますが、実行するとsegfaultがコンパイルされます。
誰もが考えている?
EDIT1:
const char my_interp[] __attribute__((section(".interp"))) = "/lib64/ld-linux-x86-64.so.2";
void my_main() {
printf("VERSION: %f\n", 0.1f);
_exit(0);
}
EDIT2:
追加環境の詳細:
012ここがセグメンテーション違反コードであります
Linuxは3.1.10-1.16-デスクトップ#1 SMP PREEMPT水6月27日午前五時21分40秒UTC 2012(d016078)のx86_64 x86_64のx86_64でGNU/Linuxの
gcc --version
のgcc(SUSE Linux)のmjolnir.site 4.6.2
x86_64-suse-linux用に設定されています。 GNU CCバージョン4.6.2でコンパイルされています。 2012-03-30 Linux 3.1.0システムでコンパイルされました。
編集3:
出力中/セグメンテーション違反時にVAR/log/messagesに:
8月11日午前8時27分45秒ミョルニルカーネル:[10560.068741]一般[11222] liblist.so保護ip:7fc2b3cb2314 sp:7fff4f5c7de8エラー:0 libc-2.14.1.so [7fc2b3c63000 + 187000]
これは私の32ビットマシンでは完全に機能します。 64ビットでも動作するはずです。とを含めましたか? –
TOC
@TOCしました。バージョン番号として浮動小数点数を印字してみましたか?フロートを印刷する場合を除いて、私が投稿したコードはうまく動作します。 – kobrien
フロートを印刷するコードを表示できますか? –