On 03/07/2011 08:57 AM, Kai Meyer wrote:
On 03/05/2011 06:24 AM, Kagamin wrote:
Kai Meyer Wrote:
I can't seem to get this to work right:
gcc -m32 -shared -fPIC Test.cpp -o libTest.so
g++ -m32 test_c.cpp -L. -lTest -o test_c
wine htod.exe Test.h Test.d
dmd test_d.d Test.d -L-L. -L-lTest -oftest_d
test_d.o: In function `_Dmain':
Test.d:(.text._Dmain+0x20): undefined reference to `increment'
collect2: ld returned 1 exit status
--- errorlevel 1
make: *** [test_d] Error 1
The resulting test_c binary from g++ works as intented (With either
LD_LIBRARY_PATH="." or LD_RUN_PATH="."):
$ ./test_c
Count = 0
Count = 1
$ ldd test_c
linux-gate.so.1 => (0x00ad1000)
libTest.so (0x005b9000)
try non-shared libTest, dmd prefers single executable compilations.
Is that the only option? I know it's possible to link to external c
libraries, and I'd like to learn how.
So I monkeyed around a little bit, and found out that if I change
"extern (C)" to "extern (C++)", the library links correctly and the
program runs.
That lead me to believe that if I added the "-cpp" option to htod.exe,
it would generate extern(C++) functions. But I got a blank Test.d file
doing it that way.
So, gcc created a libTest.so with a function in it, and dmd only finds
the function with extern(C++) and not with extern(C).
Now I'm just confused, yet pleased something worked.
-Kai Meyer