Tôi đang cố gắng biên dịch dự án. Nó biên dịch thành công. My make
thoát khỏi lệnh có mã trạng thái là 0
và không có lỗi nào được hiển thị.ldd nói rằng thư viện không được tìm thấy bằng cách biên dịch hoàn tất thành công
Tuy nhiên, dự án không hoạt động và khi tôi chạy ldd -d <file>
nó cho thấy tôi có hai thư viện không được tìm thấy.
>ldd -d output_file.so
linux-gate.so.1 => (0xf77e0000)
libvstdlib_srv.so => not found
libtier0_srv.so => not found
libm.so.6 => /lib/libm.so.6 (0xf7760000)
libdl.so.2 => /lib/libdl.so.2 (0xf775b000)
libc.so.6 => /lib/libc.so.6 (0xf75a9000)
/lib/ld-linux.so.2 (0x46e4a000)
undefined symbol: pfVectorNormalize (output_file.so)
undefined symbol: _Z12VectorAnglesRK6VectorR6QAngle (output_file.so)
undefined symbol: pfSqrt (output_file.so)
undefined symbol: __cxa_guard_acquire (output_file.so)
undefined symbol: __cxa_guard_release (output_file.so)
undefined symbol: _Z6ConMsgPKcz (output_file.so)
undefined symbol: Warning (output_file.so)
undefined symbol: __dynamic_cast (output_file.so)
undefined symbol: _Z11ConColorMsgRK5ColorPKcz (output_file.so)
undefined symbol: Error (output_file.so)
undefined symbol: AssertValidStringPtr (output_file.so)
undefined symbol: _AssertValidWritePtr (output_file.so)
undefined symbol: _AssertValidReadPtr (output_file.so)
undefined symbol: _ZTVN10__cxxabiv121__vmi_class_type_infoE (output_file.so)
undefined symbol: _ZTVN10__cxxabiv120__si_class_type_infoE (output_file.so)
undefined symbol: _ZTVN10__cxxabiv117__class_type_infoE (output_file.so)
undefined symbol: __gxx_personality_v0 (output_file.so)
Hai thư viện được thiết lập liên kết như biểu tượng đến vị trí thực tế của file:
...
lrwxrwxrwx 1 Andy Andy 62 May 2 12:30 libtier0_srv.so -> /home/dev/sdks/hl2sdk-ob-valve/lib/linux/libtier0_srv.so
lrwxrwxrwx 1 Andy Andy 64 May 2 12:30 libvstdlib_srv.so -> /home/dev/sdks/hl2sdk-ob-valve/lib/linux/libvstdlib_srv.so
-rw-r--r-- 1 Andy Andy 5444 May 2 11:53 Makefile
...
Các gcc
lệnh được chạy là
gcc -I/home/dev/sdks/hl2sdk-ob-valve/public/game/server -I. -I.. -ICEntity -Isdk -I/home/dev/project1/hl2sdk-ob-valve/public -I/home/dev/sdks/hl2sdk-ob-valve/public/engine -I/home/dev/sdks/hl2sdk-ob-valve/public/tier0 -I/home/dev/sdks/hl2sdk-ob-valve/public/tier1 -I/home/dev/sdks/hl2sdk-ob-valve/public/mathlib -I/home/dev/project1/mmsource-central/core -I/home/dev/project1/mmsource-central/core/sourcehook -I/home/dev/project1/sourcemod-central/public -I/home/dev/project1/sourcemod-central/public/sourcepawn -I/home/dev/project1/sourcemod-central/core project1_output/sdk/smsdk_ext.o project1_output/extension.o project1_output/CTrackingProjectile.o project1_output/CSentryRocket.o project1_output/CProjectileRocket.o project1_output/CProjectileArrow.o project1_output/CProjectileFlare.o project1_output/CProjectilePipe.o project1_output/CProjectileSyringe.o project1_output/CEntity/CEntity.o project1_output/CEntity/CEntityManager.o project1_output/CEntity/CPlayer.o /home/dev/project1/hl2sdk-ob-valve/lib/linux/tier1_i486.a libvstdlib_srv.so libtier0_srv.so -m32 -lm -ldl -static-libgcc -shared -o project1_output/output_file.so
Câu hỏi của tôi là: 1.) Tại sao hai thư viện đó không được tìm thấy mặc dù chúng được liên kết với nhau? 2.) Các ký hiệu không xác định là một phần của gói mathlib
, được bao gồm trong lệnh gcc
. -I/home/dev/sdks/hl2sdk-ob-valve/public/mathlib
Tại sao những điều này sẽ không được xác định, mặc dù được đưa vào?
c++
không phải là ngôn ngữ được lựa chọn và tôi biết đủ về Makefiles là nguy hiểm, nhưng không thực sự khắc phục bất cứ điều gì, vì vậy tôi xin lỗi nếu điều này không đủ thông tin. Tôi có thể cung cấp thêm khi cần thiết.
Một lưu ý phụ là SDK _really_ được đặt trong '/ dev'? –
@JoachimIsaksson No! Tôi đã che khuất những con đường và thậm chí không nghĩ về '/ dev'. Tôi đã cập nhật câu hỏi để sử dụng '/ home/dev' để điều này không gây nhầm lẫn cho bất kỳ ai. – Andy