On 12/16/2013 7:09 PM, MrSmith wrote:
You're still not linking ld properly. It would help tremendously if
you could show the command line you're using. Otherwise all people can
do is make guesses about what *might* be wrong.
Oh, right.
Here is first with "/usr/lib32/libdl.a" -L-ldl
andrey@andress-ubuntu:~/anchovy$ dmd -debug -gc -m32
"examples/fpshelper.d" "examples/main.d" -I"import" -I"deps/dlib"
-I"deps/derelict-fi-master/source" -I"deps/derelict-sdl2-master/source"
-I"deps/derelict-ft-master/source" -I"deps/derelict-gl3-master/source"
-I"deps/derelict-glfw3-master/source"
-I"deps/derelict-util-1.0.0/source" "lib/debug/libgui.a"
"lib/debug/libgraphics.a" "lib/debug/libcore.a" "lib/debug/libutils.a"
"deps/dlib/libdlib.a" "deps/derelict-fi-master/lib/libDerelictFI.a"
"deps/derelict-ft-master/lib/libDerelictFT.a"
"deps/derelict-gl3-master/lib/libDerelictGL3.a"
"deps/derelict-glfw3-master/lib/libDerelictGLFW3.a"
"deps/derelict-util-1.0.0/lib/libDerelictUtil.a" "/usr/lib32/libdl.a"
-L-ldl -of"bin/guidemo"
deps/derelict-fi-master/lib/libDerelictFI.a(sharedlib_416_4ee.o): In
function `_D8derelict4util9sharedlib13LoadSharedLibFAyaZPv':
/home/andrey/anchovy/deps/derelict-fi-master/../../../.dub/packages/derelict-util-1.0.0/source/derelict/util/sharedlib.d:60:
warning: Using 'dlopen' in statically linked applications requires at
runtime the shared libraries from the glibc version used for linking
/usr/lib32/libdl.a(dlopen.o): In function `dlopen':
(.text+0x1b): undefined reference to `__dlopen'
/usr/lib32/libdl.a(dlclose.o): In function `dlclose':
(.text+0x1): undefined reference to `__dlclose'
/usr/lib32/libdl.a(dlsym.o): In function `dlsym':
(.text+0x1b): undefined reference to `__dlsym'
/usr/lib32/libdl.a(dlerror.o): In function `dlerror':
(.text+0x1): undefined reference to `__dlerror'
collect2: error: ld returned 1 exit status
--- errorlevel 1
Second with -L-ldl only
andrey@andress-ubuntu:~/anchovy$ dmd -debug -gc -m32
"examples/fpshelper.d" "examples/main.d" -I"import" -I"deps/dlib"
-I"deps/derelict-fi-master/source" -I"deps/derelict-sdl2-master/source"
-I"deps/derelict-ft-master/source" -I"deps/derelict-gl3-master/source"
-I"deps/derelict-glfw3-master/source"
-I"deps/derelict-util-1.0.0/source" "lib/debug/libgui.a"
"lib/debug/libgraphics.a" "lib/debug/libcore.a" "lib/debug/libutils.a"
"deps/dlib/libdlib.a" "deps/derelict-fi-master/lib/libDerelictFI.a"
"deps/derelict-ft-master/lib/libDerelictFT.a"
"deps/derelict-gl3-master/lib/libDerelictGL3.a"
"deps/derelict-glfw3-master/lib/libDerelictGLFW3.a"
"deps/derelict-util-1.0.0/lib/libDerelictUtil.a" -L-ldl -of"bin/guidemo"
deps/derelict-fi-master/lib/libDerelictFI.a(sharedlib_416_4ee.o): In
function `_D8derelict4util9sharedlib13LoadSharedLibFAyaZPv':
/home/andrey/anchovy/deps/derelict-fi-master/../../../.dub/packages/derelict-util-1.0.0/source/derelict/util/sharedlib.d:60:
undefined reference to `dlopen'
deps/derelict-fi-master/lib/libDerelictFI.a(sharedlib_417_5d1.o): In
function `_D8derelict4util9sharedlib15UnloadSharedLibFPvZv':
/home/andrey/anchovy/deps/derelict-fi-master/../../../.dub/packages/derelict-util-1.0.0/source/derelict/util/sharedlib.d:64:
undefined reference to `dlclose'
deps/derelict-fi-master/lib/libDerelictFI.a(sharedlib_418_396.o): In
function `_D8derelict4util9sharedlib9GetSymbolFPvAyaZPv':
/home/andrey/anchovy/deps/derelict-fi-master/../../../.dub/packages/derelict-util-1.0.0/source/derelict/util/sharedlib.d:68:
undefined reference to `dlsym'
deps/derelict-fi-master/lib/libDerelictFI.a(sharedlib_419_463.o): In
function `_D8derelict4util9sharedlib11GetErrorStrFZAya':
/home/andrey/anchovy/deps/derelict-fi-master/../../../.dub/packages/derelict-util-1.0.0/source/derelict/util/sharedlib.d:72:
undefined reference to `dlerror'
collect2: error: ld returned 1 exit status
--- errorlevel 1
For starters, remove "/usr/lib32/libdl.a". All you need is -L-ldl. The
-L flag tells DMD that what follows needs to be passed to the linker.
-ldl tells the linker to link with libdl. It will link with the shared
version, which is really what you want. As it stands, you're telling DMD
to link with both the static version of libdl (which you don't have
installed, I think, according to the error in your original post) and
the shared version at the same time. I don't know if that's the source
of your current linker errors, but it's certainly potentially problematic.
Also, since you aren't using dub to manage your project, I suggest you
copy all of the Derelict libraries to a common location. Then, you can
remove all of the "*/libDerelict*.a" from the command line and do this
instead:
-L-Lpath/to/libs -L-lDerelictFI -L-lDerelictGL3...
On the other hand, if you use dub to manage your project, all of this,
including libdl, will be linked in for you automatically. Then your
command line becomes:
dub build
during development and
dub build --build=release
when you're ready for the release version.