#c #c #linux #ld #nm
#c #c #linux #ld #nm
Вопрос:
Когда я устанавливаю LD_BIND_NOW равным 1, а затем пытаюсь вызвать свое приложение для отладки сборки, оно не запускается из-за неопределенных символов lstat64, когда я запускаю nm и grep в «stat64»:
U lstat64@@libkernel32.so
U stat64@@libgdiuser32.so
Где «libkernel32.so «и «libgdiuser32.so » взяты из стороннего пакета и не содержат никакого определения для lstat64.
Однако сборка rls работает нормально. Когда я запускаю nm на нем и grep «stat64»
U ___lxstat64@@GLIBC_2.2
U ___xstat64@@GLIBC_2.2
T lstat64
T stat64
Я обнаружил, что отладочная версия kernel32.lib содержит:
D stat64
D lstat64
U __xstat64
U __lxstat64
В то время как релизная версия kernel32.lib не содержит никаких ссылок на «lstat64» и «stat64»
В коде мы уже включили «sys/stat.h», почему компоновщик не извлекает их из библиотек glibc?
Или мы должны использовать «__lxstat64» вместо «lstat64»?
Комментарии:
1. Вы компилируете в Windows?
2. Нет, я компилирую в Linux.