декорирование имён в gcc
От: ek_  
Дата: 06.03.08 12:15
Оценка:
Большущая просьба пособить с решением проблемы:
При сборке 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, что тоже не вариант.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.