странное поведение ld
а в то же время "gcc -shared -fPIC" работаетЕсли здесь "работает" = "линкует с динамической либой", то что мешает запустить его под strace и узнать нужные параметры ?
ld -o build/release/sdlx/libsdlx.so -shared -no_archive build/release/sdlx/cursor.os build/release/sdlx/sdl_ex.os build/release/sdlx/surface.os build/release/sdlx/system.os build/release/sdlx/joystick.os build/release/sdlx/thread.os build/release/sdlx/mutex.os build/release/sdlx/semaphore.os build/release/sdlx/color.os build/release/sdlx/glSDL/glSDL.os build/release/sdlx/c_map.os build/release/sdlx/font.os build/release/sdlx/timer.os build/release/sdlx/module.os -Lbuild/release/mrt -Lmrt -Lmrt -lmrt -lSDL -lSDL_image -lGL -lrt
ld: cannot find -lmrt
он не только libmrt не видит но и libGL.so и libSDL.so
а это gcc
strace -fv gcc -o build/release/sdlx/libsdlx.so -shared -fPIC build/release/sdlx/cursor.os build/release/sdlx/sdl_ex.os build/release/sdlx/surface.os build/release/sdlx/system.os build/release/sdlx/joystick.os build/release/sdlx/thread.os build/release/sdlx/mutex.os build/release/sdlx/semaphore.os build/release/sdlx/color.os build/release/sdlx/glSDL/glSDL.os build/release/sdlx/c_map.os build/release/sdlx/font.os build/release/sdlx/timer.os build/release/sdlx/module.os -Lbuild/release/mrt -Lmrt -Lmrt -lmrt -lSDL -lSDL_image -lGL -lrt
|
\/
[pid 10056] execve("/usr/lib/gcc/x86_64-pc-linux-gnu/4.1.2/../../../../x86_64-pc-linux-gnu/bin/ld", ["/usr/lib/gcc/x86_64-pc-
linux-gnu"..., "--eh-frame-hdr"..., "-m"..., "elf_x86_64"..., "-shared"..., "-o"..., "build/release/sdlx/libsdlx.so"..., "/us
r/lib/gcc/x86_64-pc-linux-gnu"..., "/usr/lib/gcc/x86_64-pc-linux-gnu"..., "-Lbuild/release/mrt"..., "-Lmrt"..., "-Lmrt"..., "
-L/usr/lib/gcc/x86_64-pc-linux-g"..., "-L/usr/lib/gcc/x86_64-pc-linux-g"..., "-L/usr/lib/gcc/x86_64-pc-linux-g"..., "-L/lib/.
./lib64"..., "-L/usr/lib/../lib64"..., "-L/usr/lib/gcc/x86_64-pc-linux-g"..., "-L/usr/lib/gcc/x86_64-pc-linux-g"..., "build/r
elease/sdlx/cursor.os"..., "build/release/sdlx/sdl_ex.os"..., "build/release/sdlx/surface.os"..., "build/release/sdlx/system.
os"..., "build/release/sdlx/joystick.os"..., "build/release/sdlx/thread.os"..., "build/release/sdlx/mutex.os"..., "build/rele
ase/sdlx/semaphore.os"..., "build/release/sdlx/color.os"..., "build/release/sdlx/glSDL/glSDL.o"..., "build/release/sdlx/c_map
.os"..., "build/release/sdlx/font.os"..., "build/release/sdlx/timer.os"..., "build/release/sdlx/module.os"..., "-lmrt"..., "-
lSDL"..., "-lSDL_image"..., "-lGL"..., "-lrt"..., "-lgcc"..., "--as-needed"..., "-lgcc_s"..., "--no-as-needed"..., "-lc"...,
"-lgcc"..., "--as-needed"..., "-lgcc_s"..., "--no-as-needed"..., "/usr/lib/gcc/x86_64-pc-linux-gnu"..., "/usr/lib/gcc/x86_64-
pc-linux-gnu"...], ["MANPATH=/usr/local/share/man:/us"..., "SSH_AGENT_PID=5177"..., "PYMOL_PATH=/usr/lib/python2.4/si"..., "T
ERM=xterm"..., "WINDOWID=16777268"..., "QTDIR=/usr/qt/3"..., "OLDPWD=/root"..., "MOZILLA_FIVE_HOME=/usr/lib64/moz"..., "USER=
piton"..., "IA32ROOT=/opt/intel/fortran91"..., "PRELINK_PATH_MASK=/usr/lib/gstre"..., "LS_COLORS=no=00:fi=00:di=01;34:l"...,
"GDK_USE_XFT=1"..., "INTEL_FLEXLM_LICENSE=/opt/intel/"..., "SSH_AUTH_SOCK=/tmp/ssh-brzfZS515"..., "USERNAME=piton"..., "CONFI
G_PROTECT_MASK=/etc/udev/ru"..., "PAGER=/usr/bin/less"..., "FLTK_DOCDIR=/usr/share/doc/fltk-"..., "PATH=/usr/x86_64-pc-linux-
gnu/gc"..., "DESKTOP_SESSION=fluxbox"..., "PYMOL_DATA=/usr/share/pymol/data", "GDM_XSERVER_LOCATION=local"..., "PWD=/var/tmp/
portage/games-actio"..., "EDITOR=/usr/bin/vim"..., "LANG=ru_RU.koi8r"..., "KDEDIRS=/usr:/usr/local:/usr/kde"..., "QMAKESPEC=l
inux-g++"..., "GDMSESSION=fluxbox"..., "HOME=/root"..., "SHLVL=3"..., "GCC_PATH=/usr/x86_64-pc-linux-gn"..., "PYMOL_SCRIPTS=/
usr/share/pymol/s"..., "LOGNAME=piton"..., "LESS=-R -M --shift 5"..., "PYTHONPATH=/usr/lib64/portage/py"..., "CVS_RSH=ssh"...
, "GCC_SPECS="..., "G_DATA_DIRS=/usr/share:/usr/kd"..., "DBUS_SESSION_BUS_ADDRESS=unix:ab"..., "LESSOPEN=|lesspipe.sh %s"..
., "PKG_CONFIG_PATH=/usr/qt/3/lib64/"..., "INFOPATH=/usr/share/info:/usr/sh"..., "STRIDE_BIN=/usr/bin/stride"..., "DISPLAY=:0
.0"..., "OPENGL_PROFILE=nvidia"..., "INCLUDE=/opt/intel/mkl/9.0/inclu"..., "CONFIG_PROTECT=/usr/lib64/mozill"..., "XAUTHORITY
=/root/.xauthrZwokm"..., "COLORTERM=gnome-terminal"..., "_=/usr/bin/strace"..., "COLLECT_GCC=/usr/x86_64-pc-linux"..., "COMPI
LER_PATH=/usr/libexec/gcc/x"..., "LIBRARY_PATH=/usr/lib/gcc/x86_64"..., "COLLECT_GCC_OPTIONS=\'-o\' \'build/"..., "COLLECT_NO
_DEMANGLE="...]) = 0
пока не понял в чем прикол (
Попробуй в командную строку gcc добавить -### и посмотри, какие параметры передаются collect2 (который в свою очередь с этими параметрами вызовет ld).
оказалось ld игнорирует динамические либы если в параметрах указать -no_archive
у ld нет такого параметра, однако как выяснилось он есть у интеловских компиляторов
scons, которым собирается софтина, по ошибке устанавливает этот параметр если находит интеловский компилятор
Оставить комментарий
rolex1993
по какой причине GNU ld может игнорировать динамические библиотеки да еще в причутствии параметра "-no_archive"?субж отказывается видеть динамические библиотеки напрочь: линкуется со статическими либами и естественно ругается что они не PIC, если есть только динамическая либа говорит "ld: cannot find -l..."?
Слинковать он должен динамическую либу.
Собственно если убрать все -l то он завершается нормально но файла не создает
а в то же время "gcc -shared -fPIC" работает