動的リンクを理解しようとしている場合、この質問は興味深いものになる可能性があります。
その質問に対する答えの 1 つは、動的ライブラリを作成して使用する素晴らしい例です。それに基づいて、いくつかの単純なファイルを作成します。
main.c:
extern void someFunction (int x);
int main (int argc, char** argv ) {
someFunction(666);
}
mylibrary.c:
#include <stdio.h>
void someFunction (int x) {
printf ("\nsomeFunction called with x=%d\n", x);
}
メイクファイル:
main: mylibrary.c main.c
gcc -c mylibrary.c
gcc -dynamiclib -current_version 1.0 mylibrary.o -o libmylibrary.dylib
gcc -c main.c
gcc -v main.o ./libmylibrary.dylib -o main
clean:
rm *.o
rm main
rm *.dylib
これまでのところ、すべてがうまく機能しています。make を実行し、コマンド プロンプトで ./main と入力すると、期待どおりの出力が表示されます。
someFunction called with x=666
さて、少し混ぜてみたいと思います。メイン ディレクトリのサブディレクトリである hidelib ディレクトリを作成しました。そして、makefile に次の 1 行を追加します。
main: mylibrary.c main.c
gcc -c mylibrary.c
gcc -dynamiclib -current_version 1.0 mylibrary.o -o libmylibrary.dylib
gcc -c main.c
mv libmylibrary.dylib hidelib # this is the new line
clean:
rm *.o
rm main
rm hidelib/*.*
ここで、makefile に別の行を追加して、hidelib サブディレクトリで libmylibrary.dylib を検出するようにします。./main も同じように実行できるようにしたいです。どうやってやるの?
編集:返信ありがとうございます。多くのオプションがあることは素晴らしいことですが、初心者は機能する具体的なオプションが 1 つだけ必要です。これが最後の行で私が試みていることですが、明らかに何かがわかりません。makefile はエラーなしで実行されますが、実行時に「ライブラリが見つかりません」と表示されます。
gcc main.o -rpath,'$$ORIGIN/hidelib' -lmylibrary -o main