Большущая просьба пособить с решением проблемы:
При сборке dll в gcc под виндой (3.4.2 mingw-special) в разделе экспорта в длл у функций имена пишутся без нижнего подчеркивания. А мне нужно, чтобы это нижнее подчеркивание было(длл потом подгружается из явы). -fleading-underscore не спасает ни в каком виде.
Например:
dll.h
#ifdef BUILD_DLL
/* DLL export */
#define EXPORT __declspec(dllexport)
#else
/* EXE import */
#define EXPORT __declspec(dllimport)
#endif
extern "C" EXPORT void hello(void);
dll.c
#include <stdio.h>
#include "dll.h"
EXPORT void hello(void) {
printf ("Hello\n");
}
g++ -c -fleading-underscore dll.c -o dll.o
вот что пишет о dll.o nm:
00000000 b .bss
00000000 d .data
00000000 i .drectve
00000000 r .rdata
00000000 t .text
00000000 T _hello
U _printf
замечательно, есть подчеркивание.
собираем:
g++ -shared dll.o -o dll.dll
говорим pexports dll.dll
LIBRARY dll.dll
EXPORTS
hello
вот такое вот безобразие. мне же надо, чтобы было
LIBRARY dll.dll
EXPORTS
_hello
В vc++ всё собирается как надо, но, чёрт побери, это не вариант.
Точно такое же поведение, если собирать gcc без extern "C". g++ без extern "C" подчеркивание оставляет, но при этом символ имеет примерно такой вид: _Z65hello, что тоже не вариант.