Символы не экспортируются при создании Windows DLL с использованием mingwC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Символы не экспортируются при создании Windows DLL с использованием mingw

Сообщение Anonymous »

Я пытаюсь отламать эту проблему. Библиотека не экспортирует ни один из символов C-API в последнем файле библиотеки.

Это первый плохой коммит.

Код: Выделить всё

cmake -B build \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE=mingw-w64-x86_64.cmake \
-DBUILD_EXTENSIONS='autocomplete;icu;parquet;json;fts;tpcds;tpch' \
-DENABLE_EXTENSION_AUTOLOADING=1 \
-DENABLE_EXTENSION_AUTOINSTALL=1 \
-DBUILD_UNITTESTS=FALSE \
-DBUILD_SHELL=TRUE \
-DDUCKDB_EXPLICIT_PLATFORM=x86_64-w64-mingw32-cxx11 .
cmake --build build
< /code>
Файл инструментов: < /p>
set(CMAKE_SYSTEM_NAME Windows)
set(TOOLCHAIN_PREFIX x86_64-w64-mingw32)

# cross compilers to use for C, C++ and Fortran
set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++)
set(CMAKE_Fortran_COMPILER ${TOOLCHAIN_PREFIX}-gfortran)
set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres)

# target environment on the build host system
set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX})

# modify default behavior of FIND_XXX() commands
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
< /code>
Общая библиотека (build/src/libduckdb.dll
) Экспортирует символы C-API, которые вы можете проверить с помощью WinEdump

Код: Выделить всё

$ winedump -j export libduckdb.dll | grep duckdb_vector_size
009F42F0   365  duckdb_vector_size # see this if symbols are present, empty otherwise
< /code>
Выше приведено пусто для библиотеки, построенной на этом плохого коммита. В Build/SRC 
):

Код: Выделить всё

/usr/bin/cmake -E rm -f CMakeFiles/duckdb.dir/objects.a
/usr/bin/x86_64-w64-mingw32-ar qc CMakeFiles/duckdb.dir/objects.a @CMakeFiles/duckdb.dir/objects1.rsp
/usr/lib64/ccache/x86_64-w64-mingw32-g++ -O3 -DNDEBUG -O3 -DNDEBUG   -shared -o libduckdb.dll \
-Wl,--out-implib,libduckdb.dll.a -Wl,--major-image-version,0,--minor-image-version,0 -Wl,--whole-archive \
CMakeFiles/duckdb.dir/objects.a -Wl,--no-whole-archive @CMakeFiles/duckdb.dir/linkLibs.rsp
Поэтому я попытался следовать символам, начинающимся из файла объекта (в Build/src ).
# find the C-API object file
$ tr ' ' '\n'
Для предыдущего коммита (~ d1ea1538c9) символы экспортируются, как ожидается. «Плохой» коммит не делает ничего, кроме добавления 11 новых символов. Я действительно понятия не имею, что вызывает это. Кто -нибудь мысли?


Подробнее здесь: https://stackoverflow.com/questions/794 ... sing-mingw
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»