
過去半日の間、少なくとも次の問題が発生しました。
LD_PRELOAD
私のインクルードのLD_PRELOADエントリが見つからないというエラーが発生します/lib64/libstdc++.so.6
が(これが意味があるかどうかはわかりません)、ファイルが見つからないため、何でも実行するたびに次のような結果が得られます。ERROR: ld.so: object '/lib64/libstdc++.so.6' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
そのため、LD_PRELOADを見てみると、存在しない/lib64/libstdc++.so.6が含まれていることがわかりました。
CMakeを使用してプロジェクトをビルドしようとすると、次のエラーで構成が失敗します。
In file included from /usr/include/pthread.h:23:0, from /home/eyalroz/src/mine/cuda-api-wrappers/CMakeFiles/CMakeTmp/CheckIncludeFile.c:1: /usr/include/sched.h:28:20: fatal error: stddef.h: No such file or directory
しかし、私はstdddef.h
すでに安全です/usr/include/linux/stddef.h
。
私はGNU / Linux Mint 18.3を使用しており、最近私のシステムに奇妙なことをしたことがありません(まあ、とにかく覚えていません)。
答え1
何が起こっていますか?私はソースからこのプログラムを作成しています。賢明な管理者は次のように決めました。
- 誰もが自分とまったく同じシステムとOS構成で動作します。
$HOME/.bashrc
ビルドスクリプトで想定できるように、すべての設定を設定に入れる必要があります。
これにより、私は.bashrc
あちこちでexport CC
、、、、そしてexport CXX
もっと知りました。これは仕事を台無しにします。export C_INCLUDE_PATH
LD_PRELOAD
レッスン:常に、、、、、~/.profile
に奇妙な新しいアイテムがあること~/.shrc
を確認してください。~/.bashrc
~/.bash_profile
~/.login
~/.bash_login
答え2
標準設定がLD_PRELOAD
使用されると、本当に悪い考えです。これは、実行しているすべてのソフトウェアの動作に影響を与える可能性があるためです。
目的の用途LD_PRELOAD
は主にデバッグです。セカンダリユースケースでは、プライマリ実装をmalloc()
使用に適した他の実装に置き換えることができます。
LD_PRELOAD
デバッグの例を見てみましょう。コアダンプを開始するプログラムがあり、これがNULLポインタの逆参照の結果である可能性があると思うとします。この場合、次のように電話できます。
[email protected] program
これがもはやコアをダンプしない場合、NULLポインタの逆参照が発生します。
注:予測可能なビルドが好きな場合は、ビルド環境は次のようになります。
# clear environment variables we know to be bad for the build
unset LD_OPTIONS
unset LD_AUDIT LD_AUDIT_32 LD_AUDIT_64
unset LD_BIND_NOW LD_BIND_NOW_32 LD_BIND_NOW_64
unset LD_BREADTH LD_BREADTH_32 LD_BREADTH_64
unset LD_CONFIG LD_CONFIG_32 LD_CONFIG_64
unset LD_DEBUG LD_DEBUG_32 LD_DEBUG_64
unset LD_DEMANGLE LD_DEMANGLE_32 LD_DEMANGLE_64
unset LD_FLAGS LD_FLAGS_32 LD_FLAGS_64
unset LD_LIBRARY_PATH LD_LIBRARY_PATH_32 LD_LIBRARY_PATH_64
unset LD_LOADFLTR LD_LOADFLTR_32 LD_LOADFLTR_64
unset LD_NOAUDIT LD_NOAUDIT_32 LD_NOAUDIT_64
unset LD_NOAUXFLTR LD_NOAUXFLTR_32 LD_NOAUXFLTR_64
unset LD_NOCONFIG LD_NOCONFIG_32 LD_NOCONFIG_64
unset LD_NODIRCONFIG LD_NODIRCONFIG_32 LD_NODIRCONFIG_64
unset LD_NODIRECT LD_NODIRECT_32 LD_NODIRECT_64
unset LD_NOLAZYLOAD LD_NOLAZYLOAD_32 LD_NOLAZYLOAD_64
unset LD_NOOBJALTER LD_NOOBJALTER_32 LD_NOOBJALTER_64
unset LD_NOVERSION LD_NOVERSION_32 LD_NOVERSION_64
unset LD_ORIGIN LD_ORIGIN_32 LD_ORIGIN_64
unset LD_PRELOAD LD_PRELOAD_32 LD_PRELOAD_64
unset LD_PROFILE LD_PROFILE_32 LD_PROFILE_64
#
# force locale to C
unset LC_ALL
LC_COLLATE=C; export LC_COLLATE
LC_CTYPE=C; export LC_CTYPE
LC_MESSAGES=C; export LC_MESSAGES
LC_MONETARY=C; export LC_MONETARY
LC_NUMERIC=C; export LC_NUMERIC
LC_TIME=C; export LC_TIME
自動ビルドを制御するスクリプトまたはmakefile(makefile内で環境変数の管理をサポートするmake実装を使用する場合)。ユーザーエクスペリエンスの編集は次のようになります。悪い奴の行動。