undefined reference
to `__imp_WSAGetLastError'
D:/Programs/MSYS2/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:/OpenSSL/MinGW static/lib64/libcrypto.a(libdefault-lib-winstore_store.obj):winstore_store:(.text+0x137): undefined reference to `__imp_CertOpenSystemStoreW'
я указал в cmake
target_link_libraries(${PROJECT_NAME} ws2_32)
target_link_libraries(${PROJECT_NAME} crypt32)
```
но, всё равно выдаёт ошибки. msvc нормально линкует. до этого была проблема в том, что у меня были собраны библиотеки openssl с помощью visual studio, пересобрал с помощью mingw64, библиотеки теперь .a, но выдаёт ошибки линкера, которые обычно возникают, если не указать в зависимостях ws2_32 и crypt32. как мне с помощью mingw64 это собрать?
Явно линкер не нашёл определение какого-то символа, надо библиотеку линковать.
я указал в cmake target_link_libraries(${PROJECT_NAME} ws2_32) target_link_libraries(${PROJECT_NAME} crypt32) msvc нормально линкуется с ними
А какое расширение у библиотеки? Допустим, у тебя есть библиотека MyLib. Для msvc он будет искать фалй с расширением dll или lib + def. Mingw будет искать libMyLib.so или libMyLib.a.
это виндовые библиотеки, .dll вроде они должны быть
Тогда укажи линкеру библиотеку с конкретным расширением. Вместо -lMyLib укажи -lMyLib.dll. Библиотеки mingw и msvc имеют разный формат, учити это.
у MS существует такая вещь как import library и она .lib как это не странно. Что там наворотили авторы mingw Надо спрашивать уних
уже понял сегодня, столкнулся, пересобрал openssl с помощью mingw как писал раньше, в другом тг канале помогли
https://ru.stackoverflow.com/questions/1330622/%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0-%D0%BF%D1%80%D0%B8-%D0%BB%D0%B8%D0%BD%D0%BA%D0%BE%D0%B2%D0%BA%D0%B5-winsock2-%D1%87%D0%B5%D1%80%D0%B5%D0%B7-cmake-%D0%B2-mingw-undefined-reference
И ещё https://stackoverflow.com/a/2033632 Учти, порядок перечисления библиотек важен.
лол, он есть на русском, спасибо большое!
здесь в точности тоже самое, что использую я и причём с msvc это работает
Попробуй список библиотек заключить в такую конструкцию: -Wl,--start-group -lLib1 -lLib2 -Wl,--end-group И не будет у тебя проблем с порядком перечисления библиотек.
я не знаю как передать флаги компилятору из смейка
у msvc с порядком библиотек проблем не было
Да не было - вот и юзай MSVC
set(CMAKE_CXX_FLAGS тут флаги например- Wall ) еще есть вот такие варианты add_compile_options( тут тоже можно разные флаги -stdlib=libc++ -fcoroutines-ts -lpthread указаны для примера), link_libraries(-lmingw32 -lmingwex -lkernel32 )
Нашёл, как это можно сделать: https://stackoverflow.com/a/73641444 А ещё я кратко описал эту проблему, её симптомы, причины и решение.
Спасибо большое
Обсуждают сегодня