Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.

setuid issue with libiomp5

Tom_S_1
Beginner
921 Views
Hello,
I've compiled a mixed C/Fortran program using OpenMP on Mac OS X that I gave the setuid attribute afterwards.
When I try to run it though, I get the following dyld error:
dyld: Library not loaded: libiomp5.dylib
Referenced from: /usr/local/bin/executable
Reason: unsafe use of relative rpath libiomp5.dylib in /usr/local/bin/executable with restricted binary
Trace/BPT trap
Any ideas on how this problem could be circumvented?
I'm using Version 12.0.2 on Mac OS X 10.6.6 with XCode 3.2.5
Thanks in advance,
Tom
0 Kudos
4 Replies
TimP
Honored Contributor III
921 Views
Can you specify the absolute rpath in your link step?
Here's a blog about XCode's own special way.
0 Kudos
Tom_S_1
Beginner
921 Views
The project I'm compiling is autotools based.
The main library is mixed C/Fortran and is linked to libiomp5.
This is the output from the make step during the linking stage:
/bin/sh ../libtool --tag=FC --mode=link ifort -I/usr/local/include -I/usr/local/include/fgsl -I/opt/local/include -I/opt/local/include/xraylib -g -DDEBUG=0 -assume realloc_lhs -openmp -openmp-report2 -version-info 0:0:0 -o libxmimsim.la -rpath /usr/local/lib libxmimsim_la-xmi_random.lo libxmimsim_la-xmi_random_dev.lo libxmimsim_la-xmi_xml.lo libxmimsim_la-xmi_data_structs.lo libxmimsim_la-xmi_aux.lo libxmimsim_la-xmi_aux_f.lo libxmimsim_la-xmi_main.lo libxmimsim_la-xmi_lines.lo libxmimsim_la-xmi_pymca.lo libxmimsim_la-xmi_solid_angle_f.lo libxmimsim_la-xmi_solid_angle.lo -L/usr/local/lib -lhdf5hl_fortran -lhdf5_hl -lhdf5_fortran -lhdf5 -lz -lm -L/opt/local/lib -lxml2 -L/opt/local/lib -lxrlf03 -L/usr/local/lib -L/opt/local/lib -lfgsl -lgsl -lgslcblas -lm -L/opt/local/lib -lglib-2.0 -lintl -L/Developer/opt/intel/composerxe/lib/ -liomp5
libtool: link: ifort -dynamiclib -undefined dynamic_lookup -o .libs/libxmimsim.0.dylib .libs/libxmimsim_la-xmi_random.o .libs/libxmimsim_la-xmi_random_dev.o .libs/libxmimsim_la-xmi_xml.o .libs/libxmimsim_la-xmi_data_structs.o .libs/libxmimsim_la-xmi_aux.o .libs/libxmimsim_la-xmi_aux_f.o .libs/libxmimsim_la-xmi_main.o .libs/libxmimsim_la-xmi_lines.o .libs/libxmimsim_la-xmi_pymca.o .libs/libxmimsim_la-xmi_solid_angle_f.o .libs/libxmimsim_la-xmi_solid_angle.o -L/usr/local/lib /usr/local/lib/libhdf5hl_fortran.a /usr/local/lib/libhdf5_hl.a /usr/local/lib/libhdf5_fortran.a /usr/local/lib/libhdf5.a -L/opt/local/lib /opt/local/lib/libxml2.dylib -lpthread -lz /opt/local/lib/libxrlf03.dylib /opt/local/lib/libxrl.dylib /usr/local/lib/libfgsl.dylib /opt/local/lib/libgsl.dylib /opt/local/lib/libgslcblas.dylib -lm /opt/local/lib/libglib-2.0.dylib -lresolv /opt/local/lib/libintl.dylib /opt/local/lib/libiconv.dylib -lc -L/Developer/opt/intel/composerxe/lib/ -liomp5 -framework Carbon -install_name /usr/local/lib/libxmimsim.0.dylib -compatibility_version 1 -current_version 1.0 -single_module
libtool: link: (cd ".libs" && rm -f "libxmimsim.dylib" && ln -s "libxmimsim.0.dylib" "libxmimsim.dylib")
libtool: link: ar cru .libs/libxmimsim.a libxmimsim_la-xmi_random.o libxmimsim_la-xmi_random_dev.o libxmimsim_la-xmi_xml.o libxmimsim_la-xmi_data_structs.o libxmimsim_la-xmi_aux.o libxmimsim_la-xmi_aux_f.o libxmimsim_la-xmi_main.o libxmimsim_la-xmi_lines.o libxmimsim_la-xmi_pymca.o libxmimsim_la-xmi_solid_angle_f.o libxmimsim_la-xmi_solid_angle.o
libtool: link: ranlib .libs/libxmimsim.a
libtool: link: ( cd ".libs" && rm -f "libxmimsim.la" && ln -s "../libxmimsim.la" "libxmimsim.la" )
/bin/sh ../libtool --tag=FC --mode=link ifort -I/usr/local/include -I/usr/local/include/fgsl -I/opt/local/include -I/opt/local/include/xraylib -g -DDEBUG=0 -assume realloc_lhs -openmp -openmp-report2 -version-info 0:0:0 -o libxmimsim.la -rpath /usr/local/lib libxmimsim_la-xmi_random.lo libxmimsim_la-xmi_random_dev.lo libxmimsim_la-xmi_xml.lo libxmimsim_la-xmi_data_structs.lo libxmimsim_la-xmi_aux.lo libxmimsim_la-xmi_aux_f.lo libxmimsim_la-xmi_main.lo libxmimsim_la-xmi_lines.lo libxmimsim_la-xmi_pymca.lo libxmimsim_la-xmi_solid_angle_f.lo libxmimsim_la-xmi_solid_angle.lo -L/usr/local/lib -lhdf5hl_fortran -lhdf5_hl -lhdf5_fortran -lhdf5 -lz -lm -L/opt/local/lib -lxml2 -L/opt/local/lib -lxrlf03 -L/usr/local/lib -L/opt/local/lib -lfgsl -lgsl -lgslcblas -lm -L/opt/local/lib -lglib-2.0 -lintl -L/Developer/opt/intel/composerxe/lib/ -liomp5libtool: link: ifort -dynamiclib -undefined dynamic_lookup -o .libs/libxmimsim.0.dylib .libs/libxmimsim_la-xmi_random.o .libs/libxmimsim_la-xmi_random_dev.o .libs/libxmimsim_la-xmi_xml.o .libs/libxmimsim_la-xmi_data_structs.o .libs/libxmimsim_la-xmi_aux.o .libs/libxmimsim_la-xmi_aux_f.o .libs/libxmimsim_la-xmi_main.o .libs/libxmimsim_la-xmi_lines.o .libs/libxmimsim_la-xmi_pymca.o .libs/libxmimsim_la-xmi_solid_angle_f.o .libs/libxmimsim_la-xmi_solid_angle.o -L/usr/local/lib /usr/local/lib/libhdf5hl_fortran.a /usr/local/lib/libhdf5_hl.a /usr/local/lib/libhdf5_fortran.a /usr/local/lib/libhdf5.a -L/opt/local/lib /opt/local/lib/libxml2.dylib -lpthread -lz /opt/local/lib/libxrlf03.dylib /opt/local/lib/libxrl.dylib /usr/local/lib/libfgsl.dylib /opt/local/lib/libgsl.dylib /opt/local/lib/libgslcblas.dylib -lm /opt/local/lib/libglib-2.0.dylib -lresolv /opt/local/lib/libintl.dylib /opt/local/lib/libiconv.dylib -lc -L/Developer/opt/intel/composerxe/lib/ -liomp5 -framework Carbon -install_name /usr/local/lib/libxmimsim.0.dylib -compatibility_version 1 -current_version 1.0 -single_modulelibtool: link: (cd ".libs" && rm -f "libxmimsim.dylib" && ln -s "libxmimsim.0.dylib" "libxmimsim.dylib")libtool: link: ar cru .libs/libxmimsim.a libxmimsim_la-xmi_random.o libxmimsim_la-xmi_random_dev.o libxmimsim_la-xmi_xml.o libxmimsim_la-xmi_data_structs.o libxmimsim_la-xmi_aux.o libxmimsim_la-xmi_aux_f.o libxmimsim_la-xmi_main.o libxmimsim_la-xmi_lines.o libxmimsim_la-xmi_pymca.o libxmimsim_la-xmi_solid_angle_f.o libxmimsim_la-xmi_solid_angle.olibtool:
link: ranlib .libs/libxmimsim.alibtool: link: ( cd ".libs" && rm -f "libxmimsim.la" && ln -s "../libxmimsim.la" "libxmimsim.la" )
The output for the executable that is linked to this library:
gcc-mp-4.5 -DHAVE_CONFIG_H -I. -I../../bin -I.. -I../../include -I../include -I../../src -I../src -I../../bin -DXMIMSIM_HDF5_SOLID_ANGLES="/usr/local/share/xmimsim/xmimsim-solid-angles.h5" -g -DDEBUG=1 -Wall -march=native -mtune=native -MT xmimsim_test_solid_angle-xmimsim-test-solid-angle.o -MD -MP -MF .deps/xmimsim_test_solid_angle-xmimsim-test-solid-angle.Tpo -c -o xmimsim_test_solid_angle-xmimsim-test-solid-angle.o `test -f 'xmimsim-test-solid-angle.c' || echo '../../bin/'`xmimsim-test-solid-angle.c
mv -f .deps/xmimsim_test_solid_angle-xmimsim-test-solid-angle.Tpo .deps/xmimsim_test_solid_angle-xmimsim-test-solid-angle.Po
/bin/sh ../libtool --tag=CC --mode=link gcc-mp-4.5 -DXMIMSIM_HDF5_SOLID_ANGLES="/usr/local/share/xmimsim/xmimsim-solid-angles.h5" -g -DDEBUG=1 -Wall -march=native -mtune=native -o xmimsim-test-solid-angle xmimsim_test_solid_angle-xmimsim-test-solid-angle.o ../src/libxmimsim.la -L/Developer/opt/intel/composerxe/lib/ -liomp5
libtool: link: gcc-mp-4.5 -DXMIMSIM_HDF5_SOLID_ANGLES="/usr/local/share/xmimsim/xmimsim-solid-angles.h5" -g -DDEBUG=1 -Wall -march=native -mtune=native -o .libs/xmimsim-test-solid-angle xmimsim_test_solid_angle-xmimsim-test-solid-angle.o ../src/.libs/libxmimsim.dylib -L/usr/local/lib -L/opt/local/lib -L/Developer/opt/intel/composerxe/lib/ /opt/local/lib/libxml2.dylib -lpthread -lz /opt/local/lib/libxrlf03.dylib /opt/local/lib/libxrl.dylib /usr/local/lib/libfgsl.dylib /opt/local/lib/libgsl.dylib /opt/local/lib/libgslcblas.dylib -lm /opt/local/lib/libglib-2.0.dylib -lresolv /opt/local/lib/libintl.dylib /opt/local/lib/libiconv.dylib -lc -liomp5 -framework Carbon
Hope this helps...
Take care,
Tom
0 Kudos
Tom_S_1
Beginner
921 Views
The problem can be reproduced easily with the following example:


PROGRAM test
USE :: omp_lib
INTEGER :: thread_num
!$omp parallel default(shared) private(thread_num)
thread_num = omp_get_thread_num()
WRITE (6,*) 'thread: ',thread_num
!$omp end parallel
ENDPROGRAM

compile with:
ifort -o test -openmp test.F90
sudo chown root:wheel test
sudo chmod u+s test
Running it with./test should then give the following output:
dyld: Library not loaded: libiomp5.dylib
Referenced from: test
Reason: unsafe use of relative rpath libiomp5.dylib in test with restricted binary
Trace/BPT trap
adding -openmp-link static to the compiler solves the problem for me but the manual says it's a deprecated option... I assume this means it will be removed in a future release?
Tom
0 Kudos
TimP
Honored Contributor III
921 Views
As long as a static copy of libiomp5 is present in the compiler installation, you could link it by specifying it in the proper position in your link command, even if the -openmp-link option disappears.
0 Kudos
Reply