o- اسم فایل خروجی رو مشخص می کنه که اینجا libfindrtp.so هست. (چون این یه کتابخونه هست، به نظرم اینجا یه گزینه shared- کم هست و وارد نشده؟؟؟ اگه اشتباه می کنم دوستان تصحیح کنن)
بله درست میفرمایید. البته من دلیلش رو نمیدونم اما این گزینه shared رو در LDFLAGS قرار دادم (البته فکر کنم قبلش این دستور گزینه shared- رو خودش هم داشت که بعد از اضافه کردن به LDFLAGS که نمیدانم چیست حذفش کردم).
البته بار دوم (بعد از پست شما) به جای قبلی برگردوندمش. و گزینه shared- رو اضافه کردم.
اما یک مشکل هنگام کامپایل بهوجود آمد.
این کُد (به همراه shared-) با خطا مواجه میشه:
gcc -shared -o libfindrtp.so libfindrtp.o packet.o sccp.o sip.o -lpcap
/usr/lib64/gcc/x86_64-slackware-linux/4.7.1/../../../../x86_64-slackware-linux/bin/ld: packet.o: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
packet.o: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
make: *** [libfindrtp] Error 1
بعد در اینترنت به موارد مشابه که برخوردم گفت که چون شما میخواید یک object بسازید باید از گزینه c- استفاده کنید.
بعد از استفاده از گزینه c- هم به مشکل جدیدی برخوردم:
gcc -shared -c -o libfindrtp.so libfindrtp.o packet.o sccp.o sip.o -lpcap
gcc: warning: libfindrtp.o: linker input file unused because linking not done
gcc: warning: packet.o: linker input file unused because linking not done
gcc: warning: sccp.o: linker input file unused because linking not done
gcc: warning: sip.o: linker input file unused because linking not done
اضافه کردن گزینه c- در اینجا کار درستی هست؟ (فکر میکنم که در کامپایلر نسخه جدید این کُد دچار مشکل شده، در کامپایلرهای خیلی قدیمی حدود سال ۲۰۰۶ «گمان میکنم نسخه ۳.۶» این مشکل وجود ندارد؛ یعنی نیازی به پارامتر c- نبود و بدون اشکال کامپایل میکند.)