Estoy construyendo una biblioteca dinámica de Windows usando la cadena de herramientas MinGW.¿Cómo decirle al enlazador MinGW que no exporte todos los símbolos?
Para construir esta biblioteca estoy vinculando estáticamente a otros 2 que ofrecen una API y tengo un archivo .def
donde escribí el único símbolo que deseo exportar en mi biblioteca.
El problema es que GCC está exportando todos los símbolos, incluidos los de las bibliotecas a las que estoy vinculando. ¿Hay alguna forma de decirle al vinculador que solo exporte los símbolos en el archivo def
?
Sé que existe la opción --export-all-symbols
pero parece que no es lo contrario.
En este momento la última línea de la escritura de la estructura tiene esta estructura:
g++ -shared CXXFLAGS DEFINES INCLUDES -o library.dll library.cpp DEF_FILE \
OBJECT_FILES LIBS -Wl,--enable-stdcall-fixup
EDIT: En el docs sobre el enlazador se dice que --export-all-symbols
es el comportamiento predeterminado y que es desactivada cuando no se utiliza esa opción explícitamente si proporciona un archivo def
, excepto cuando no lo haga; los símbolos en libs de terceros se exportan de todos modos.
EDITAR: Agregar la opción --exclude-libs LIBS
o –exclude-symbols SYMBOLS
no impide que se exporten los símbolos de las bibliotecas.
¡Gracias por tu respuesta! Funciona, a menos que los símbolos se especifiquen en el archivo 'def' no se exportan, incluso los de las bibliotecas. Usaré dllwrap, estoy usando binutils 2.20 y dllwrap todavía está allí así que tal vez todavía se mantenga. Si está obsoleto ... ¿No debería haber una forma de hacer lo mismo usando solo gcc y cia? –
@James, la forma preferida es marcar los símbolos en la fuente con 'dllexport/dllimport' y tener la visibilidad del símbolo manejada de esa manera. – rubenvb