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.

Reply via email to