Nightmare1
@Nightmare1
Программист

Экспортирование функций из .so библиотеки?

__attribute__((dllexport)) bool exported_test_function()
{
    std::cout << "Function Called Externally" << std::endl;
    return true;
}


src/cpp.licenses.cpp:25:56: warning: ‘dllexport’ attribute directive ignored [-Wattributes]
25 | __attribute__((dllexport)) bool exported_test_function()

bin/Release/libdlicenses.so: file format elf64-x86-64

DYNAMIC SYMBOL TABLE:
0000000000000000 w D *UND* 0000000000000000 __cxa_finalize
0000000000000000 w D *UND* 0000000000000000 _ITM_registerTMCloneTable
0000000000000000 w D *UND* 0000000000000000 _ITM_deregisterTMCloneTable
0000000000000000 w D *UND* 0000000000000000 __gmon_start__


При
__attribute__((visibility("default"))) bool exported_test_function()


Та же проблемаа, нету функции exported_test_function в таблице экспорта, как исправить?
  • Вопрос задан
  • 162 просмотра
Пригласить эксперта
Ответы на вопрос 2
@D3Nd3R
Так как в тегах gcc:
Если я правильно помню в gcc по дефолту экспортирует символы
dll[export|import] это атрибуты msvc

при разработке на msvc для таких атрибутов принято писать макросы
#if defined(BUILDING)
#define DLL_ATTR  __declspec(dllexport)
#else
#define DLL_ATTR   __declspec(dllimport)
#endif


BUILDING должен быть определен при сборке
если используется cmake, то в CMAKE_CXX_FLAGS надо добавть /DBUILDING
Ответ написан
Комментировать
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Та же проблемаа, нету функции exported_test_function в таблице экспорта, как исправить?

Я делаю так, функция на месте:
$ cat > 1027136.cс
__attribute__((visibility("default"))) bool exported_test_function()
{
        return true;
}
$ g++ -fPIC -shared 1027136.cc -o 1027136.so
$ objdump -T 1027136.so

1027136.so:     file format elf64-x86-64

DYNAMIC SYMBOL TABLE:
0000000000000000  w   DF *UND*  0000000000000000  GLIBC_2.2.5 __cxa_finalize
0000000000000000  w   D  *UND*  0000000000000000              _ITM_deregisterTMCloneTable
0000000000000000  w   D  *UND*  0000000000000000              __gmon_start__
0000000000000000  w   D  *UND*  0000000000000000              _ITM_registerTMCloneTable
00000000000010f5 g    DF .text  000000000000000b  Base        _Z22exported_test_functionv

Что за платформа, как выполняется сборка?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы