How to use a function without their sources
Maxim Fomin
maxim at maxim-fomin.ru
Fri Jan 18 10:10:34 PST 2013
On Friday, 18 January 2013 at 17:47:42 UTC, nazriel wrote:
> On Friday, 18 January 2013 at 17:02:51 UTC, Jordi Sayol wrote:
>> Is there a way to use a function from a static D library
>> without importing their D sources nor their DI interface?
>
> lib.d:
>
> extern(C) void printf(const char*, ...);
>
> void foo() {
> printf("%s".ptr, "hi".ptr);
> }
>
> test.d:
>
> extern(C) void _D3lib3fooFZv();
>
> void main() {
> _D3lib3fooFZv();
> }
>
> Hehe.
>
> Now, to be honest that is a good question. How to handle name
> mangling?
> Maybe pragma(mangleOf, "") by Alex Petterson could help.
----lib.d----
extern(C) void printf(const char*, ...);
extern(C) void foo() {
printf("%s\n".ptr, "hi".ptr);
}
----main.d----
extern extern(C) void foo();
void main() {
foo();
}
--------------
# dmd mylib.d -lib -oflibmylib.a
# dmd main.d -L-lmylib -L-L.
This is possible if inside library non-member functions are
marked as extern(C). Otherwise a .di file is needed.
More information about the Digitalmars-d-learn
mailing list