Я пытаюсь скомпилировать проект. Он успешно компилируется. Мои команды make
выходят со статусом 0
и ошибок не отображается.ldd говорит, что библиотека не найдена компиляцией успешно завершена
Однако проект не работает, и когда я запустил ldd -d <file>
, он показывает, что у меня есть две библиотеки, которые не найдены.
>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)
Эти две библиотеки создаются как символические ссылки на фактическое местоположение файла:
...
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
...
gcc
команда бежится является
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
Мои вопросы: 1.) Почему эти две библиотеки не найдены, хотя они символически связаны? 2.) Неопределенные символы являются частью пакета mathlib
, который включен в команду gcc
. -I/home/dev/sdks/hl2sdk-ob-valve/public/mathlib
Почему они не определены, несмотря на то, что они включены?
c++
не является моим языком выбора, и я достаточно знаю о Makefiles, чтобы быть опасным, но на самом деле ничего не исправлять, поэтому приношу свои извинения, если этого недостаточно. Я могу предоставить больше по мере необходимости.
В качестве примечания стороны, SDK _really_ размещен в '/ dev'? –
@JoachimIsaksson Нет! Я скрывал пути и даже не думал о '/ dev'. Я обновил вопрос, чтобы использовать '/ home/dev', поэтому это никого не смущает. – Andy