digitalmars.D.learn - Problems linking libdl?
I've tried the following using dmd 58 and trunk - both -m64 on kubuntu. Any idea what I'm doing wrong? import std.loader; void main(string[] args) { auto res = ExeModule_Init(); assert(res == 0); scope(exit) ExeModule_Uninit(); auto mod = ExeModule_Load("./libtcod.so"); } $ dmd-trunk -v -L-ldl so.d gcc so.o -o so -m64 -ldl -Xlinker -L/home/simendsjo/code/dmd-trunk/build/lib64 -Xlinker -L/home/simendsjo/code/dmd-trunk/build/lib -Xlinker --no-warn-search-mismatch -Xlinker --export-dynamic -lphobos2 -lpthread -lm -lrt /home/simendsjo/code/dmd-trunk/build/lib64/libphobos2.a(loader_ad5_5c6.o): In function `_D3std6loader15ExeModule_Load_FxAyaZPv': std/loader.d:(.text._D3std6loader15ExeModule_Load_FxAyaZPv+0x69): undefined reference to `dlopen' /home/simendsjo/code/dmd-trunk/build/lib64/libphobos2.a(loader_ad2_567.o): In function `_D3std6loader13record_error_FZv': std/loader.d:(.text._D3std6loader13record_error_FZv+0x7): undefined reference to `dlerror' /home/simendsjo/code/dmd-trunk/build/lib64/libphobos2.a(loader_ad7_707.o): In function `_D3std6loader18ExeModule_Release_FKPvZv': std/loader.d:(.text._D3std6loader18ExeModule_Release_FKPvZv+0x31): undefined reference to `dlclose' /home/simendsjo/code/dmd-trunk/build/lib64/libphobos2.a(loader_ad8_7dc.o): In function `_D3std6loader20ExeModule_GetSymbol_FKPvxAyaZPv': std/loader.d:(.text._D3std6loader20ExeModule_GetSymbol_FKPvxAyaZPv+0x2a): undefined reference to `dlsym' collect2: ld returned 1 exit status --- errorlevel 1 $ locate libdl (...) /lib/x86_64-linux-gnu/libdl-2.13.so /lib/x86_64-linux-gnu/libdl.so.2 /lib32/libdl-2.13.so /lib32/libdl.so.2 /usr/lib/x86_64-linux-gnu/libdl.a /usr/lib/x86_64-linux-gnu/libdl.so /usr/lib32/libdl.a /usr/lib32/libdl.so (...)
Feb 20 2012
On Mon, 20 Feb 2012 21:41:45 +0100, simendsjo <simendsjo gmail.com> wrote:I've tried the following using dmd 58 and trunk - both -m64 on kubuntu. Any idea what I'm doing wrong? import std.loader; void main(string[] args) { auto res = ExeModule_Init(); assert(res == 0); scope(exit) ExeModule_Uninit(); auto mod = ExeModule_Load("./libtcod.so"); } $ dmd-trunk -v -L-ldl so.d gcc so.o -o so -m64 -ldl -Xlinker -L/home/simendsjo/code/dmd-trunk/build/lib64 -Xlinker -L/home/simendsjo/code/dmd-trunk/build/lib -Xlinker --no-warn-search-mismatch -Xlinker --export-dynamic -lphobos2 -lpthread -lm -lrt /home/simendsjo/code/dmd-trunk/build/lib64/libphobos2.a(loader_ad5_5c6.o): In function `_D3std6loader15ExeModule_Load_FxAyaZPv': std/loader.d:(.text._D3std6loader15ExeModule_Load_FxAyaZPv+0x69): undefined reference to `dlopen' /home/simendsjo/code/dmd-trunk/build/lib64/libphobos2.a(loader_ad2_567.o): In function `_D3std6loader13record_error_FZv': std/loader.d:(.text._D3std6loader13record_error_FZv+0x7): undefined reference to `dlerror' /home/simendsjo/code/dmd-trunk/build/lib64/libphobos2.a(loader_ad7_707.o): In function `_D3std6loader18ExeModule_Release_FKPvZv': std/loader.d:(.text._D3std6loader18ExeModule_Release_FKPvZv+0x31): undefined reference to `dlclose' /home/simendsjo/code/dmd-trunk/build/lib64/libphobos2.a(loader_ad8_7dc.o): In function `_D3std6loader20ExeModule_GetSymbol_FKPvxAyaZPv': std/loader.d:(.text._D3std6loader20ExeModule_GetSymbol_FKPvxAyaZPv+0x2a): undefined reference to `dlsym' collect2: ld returned 1 exit status --- errorlevel 1 $ locate libdl (...) /lib/x86_64-linux-gnu/libdl-2.13.so /lib/x86_64-linux-gnu/libdl.so.2 /lib32/libdl-2.13.so /lib32/libdl.so.2 /usr/lib/x86_64-linux-gnu/libdl.a /usr/lib/x86_64-linux-gnu/libdl.so /usr/lib32/libdl.a /usr/lib32/libdl.so (...)I get the same error using gdc-4.6
Feb 20 2012
On 02/20/2012 09:49 PM, simendsjo wrote:On Mon, 20 Feb 2012 21:41:45 +0100, simendsjo <simendsjo gmail.com> wrote:The problem is that -ldl should appear after -lphobos2 in the arguments passed to gcc. -- Mike WeyI've tried the following using dmd 58 and trunk - both -m64 on kubuntu. Any idea what I'm doing wrong? import std.loader; void main(string[] args) { auto res = ExeModule_Init(); assert(res == 0); scope(exit) ExeModule_Uninit(); auto mod = ExeModule_Load("./libtcod.so"); } $ dmd-trunk -v -L-ldl so.d gcc so.o -o so -m64 -ldl -Xlinker -L/home/simendsjo/code/dmd-trunk/build/lib64 -Xlinker -L/home/simendsjo/code/dmd-trunk/build/lib -Xlinker --no-warn-search-mismatch -Xlinker --export-dynamic -lphobos2 -lpthread -lm -lrt.... I get the same error using gdc-4.6
Feb 20 2012
On Mon, 20 Feb 2012 22:26:58 +0100, Mike Wey <mike-wey example.com> wrote:On 02/20/2012 09:49 PM, simendsjo wrote:Ok, that removed the error (although I got another). But how can I specify this when I run dmd or gdc? dmd and gdc adds -L options before phobos...On Mon, 20 Feb 2012 21:41:45 +0100, simendsjo <simendsjo gmail.com> wrote:The problem is that -ldl should appear after -lphobos2 in the arguments passed to gcc.I've tried the following using dmd 58 and trunk - both -m64 on kubuntu. Any idea what I'm doing wrong? import std.loader; void main(string[] args) { auto res = ExeModule_Init(); assert(res == 0); scope(exit) ExeModule_Uninit(); auto mod = ExeModule_Load("./libtcod.so"); } $ dmd-trunk -v -L-ldl so.d gcc so.o -o so -m64 -ldl -Xlinker -L/home/simendsjo/code/dmd-trunk/build/lib64 -Xlinker -L/home/simendsjo/code/dmd-trunk/build/lib -Xlinker --no-warn-search-mismatch -Xlinker --export-dynamic -lphobos2 -lpthread -lm -lrt.... I get the same error using gdc-4.6
Feb 20 2012
On 02/20/2012 10:33 PM, simendsjo wrote:On Mon, 20 Feb 2012 22:26:58 +0100, Mike Wey <mike-wey example.com> wrote:The last time this problem came up in the newsgroup, with librt, it was moved from the configuration file into the compiler, so now it's hardcoded. You could try passing -L--start-group before -L-ldl it should cause ld to recursively search for the symbols. Unfortunately i can't test this on my system. -- Mike WeyOn 02/20/2012 09:49 PM, simendsjo wrote:Ok, that removed the error (although I got another). But how can I specify this when I run dmd or gdc? dmd and gdc adds -L options before phobos...On Mon, 20 Feb 2012 21:41:45 +0100, simendsjo <simendsjo gmail.com> wrote:The problem is that -ldl should appear after -lphobos2 in the arguments passed to gcc.I've tried the following using dmd 58 and trunk - both -m64 on kubuntu. Any idea what I'm doing wrong? import std.loader; void main(string[] args) { auto res = ExeModule_Init(); assert(res == 0); scope(exit) ExeModule_Uninit(); auto mod = ExeModule_Load("./libtcod.so"); } $ dmd-trunk -v -L-ldl so.d gcc so.o -o so -m64 -ldl -Xlinker -L/home/simendsjo/code/dmd-trunk/build/lib64 -Xlinker -L/home/simendsjo/code/dmd-trunk/build/lib -Xlinker --no-warn-search-mismatch -Xlinker --export-dynamic -lphobos2 -lpthread -lm -lrt.... I get the same error using gdc-4.6
Feb 21 2012