全体像を示すことは大きすぎて難しいため、説明と理解が少し複雑になる可能性のある問題に直面しています。
すみません。
次のMakefileについて考えてみます。
all: clients.so simulator backup
LD_PRELOAD=/home/Juggler/client/clients.so ./simulator
backup: backup.c libclient.a
gcc backup.c -o backup -L /home/Juggler/client -L. -lclient -ldl
simulator: simulator.c libclient.a
gcc -g simulator.c -o simulator -L /home/Juggler/client -L. -lclient -ldl -pthread
libclient.a: libclient.o client.o
ar rcs libclient.a libclient.o client.o
libclient.o:libclient.c
gcc -c libclient.c -o libclient.o -pthread
clients.so: client.o client_invoke.o
ld -shared -o clients.so client_invoke.o client.o -ldl
client_invoke.o: client_invoke.c
gcc -Wall -fPIC -DPIC -c -g client_invoke.c
client.o: client.c
gcc -Wall -fPIC -DPIC -c -g client.c -ldl -pthread
libclient.cからclient.cで記述された関数を呼び出し、client.cのこれらの関数はpthread_key_create()、pthread_setspecific..etcを呼び出します。
スレッドはsimulator.cによって作成され、これらのスレッドは他のファイルに書き込まれた関数にアクセスします。
makeを実行すると...次のようなエラーが表示されます。
/home/Juggler/client/libclient.a(client.o):In function 'setup_connection':
/home/Juggler/client/client.c:35: undefined reference to 'pthread_setspecific'
pthread.hはclient.cとlibclient.cの両方に含まれています
anypointersに感謝します。私は情報が非常に少ないことを理解しています...
ありがとう