Hello i want to switch from gcc to clang, i did everything as described here https://blog.jetbrains.com/clion/2020/12/setting-up-clang-on-windows/ but compilation ends with errror
ld.lld: error: undefined symbol: __declspec(dllimport) __sys_nerr
>>> referenced by C:/dev-tools/vcpkg/buildtrees/curl/src/url-7_83_1-606f2be415.clean/lib/strerror.c:841
>>> libcurl-d.a(strerror.c.obj):(Curl_strerror)
ld.lld: error: undefined symbol: __declspec(dllimport) __sys_errlist
>>> referenced by C:/dev-tools/vcpkg/buildtrees/curl/src/url-7_83_1-606f2be415.clean/lib/strerror.c:842
>>> libcurl-d.a(strerror.c.obj):(Curl_strerror)
ld.lld: error: undefined symbol: std::__once_callable
>>> referenced by C:\Users\User\CLionProjects\a\main.cpp
>>> objects.a(main.cpp.obj)
ld.lld: error: undefined symbol: std::__once_call
>>> referenced by C:\Users\User\CLionProjects\a\main.cpp
>>> objects.a(main.cpp.obj)
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
Here is my cmake file
cmake_minimum_required(VERSION 3.16)
include(cmake/FileEmbed.cmake)
project(testEnv)
if (UNIX)
message("CMake flags for Linux")
set(CMAKE_CXX_FLAGS "-s -O3 -fdata-sections -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -Wwrite-strings -Wl,--gc-sections -fstack-protector -fPIC -Wl,--no-dynamic-linker ")
set(CMAKE_THREAD_LIBS_INIT "-lpthread")
set(CMAKE_HAVE_THREADS_LIBRARY 1)
set(CMAKE_USE_WIN32_THREADS_INIT 0)
set(CMAKE_USE_PTHREADS_INIT 1)
set(THREADS_PREFER_PTHREAD_FLAG ON)
elseif (WIN32)
message("CMake flags for Windows")
# set(CMAKE_CXX_FLAGS "-s -O3 -Os -fdata-sections -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -fuse-ld=lld -Wl,--gc-sections")
set(CMAKE_CXX_FLAGS "-s -O3 -fno-ident -fno-use-linker-plugin -flto -fdata-sections -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -fstack-protector -fuse-ld=lld -fno-math-errno -march=native")
endif ()
set(CMAKE_C_FLAGS "-s")
SET(CMAKE_EXE_LINKER_FLAGS "-static")
find_package(CURL CONFIG REQUIRED)
find_package(OpenSSL REQUIRED)
find_package(Protobuf CONFIG REQUIRED)
find_package(fmt CONFIG REQUIRED)
#minhook library
if (WIN32)
find_package(minhook CONFIG REQUIRED)
endif ()
include_directories(${CMAKE_BINARY_DIR}/file_embed)
include_directories("include/jni")
link_directories("include")
add_library(testEnv SHARED main.cpp [and all other libraries etc])
if (WIN32)
target_link_libraries(testEnv minhook::minhook)
if (${COMPILE_ARCH} STREQUAL "x64")
message("Linking x64 libraries [Windows]")
target_link_libraries(testEnv ${CMAKE_SOURCE_DIR}/libs/linkerLibs/windows_x64/Version.lib)
target_link_libraries(testEnv ${CMAKE_SOURCE_DIR}/libs/linkerLibs/windows_x64/WinTrust.lib)
target_link_libraries(testEnv ${CMAKE_SOURCE_DIR}/libs/linkerLibs/windows_x64/kernel32.lib)
target_link_libraries(testEnv ${CMAKE_SOURCE_DIR}/libs/linkerLibs/windows_x64/libVirtualizerArea.a)
else ()
message("Linking x32 libraries [Windows]")
target_link_libraries(testEnv ${CMAKE_SOURCE_DIR}/libs/linkerLibs/windows_x32/jvm.lib)
target_link_libraries(testEnv ${CMAKE_SOURCE_DIR}/libs/linkerLibs/windows_x32/Version.lib)
target_link_libraries(testEnv ${CMAKE_SOURCE_DIR}/libs/linkerLibs/windows_x32/WinTrust.lib)
endif ()
elseif (UNIX)
link_directories(${CMAKE_SOURCE_DIR}/libs/linkerLibs/linux_64/)
target_link_libraries(testEnv ${CMAKE_SOURCE_DIR}/libs/linkerLibs/linux_64/libVirtualizerArea.a)
endif ()
target_link_libraries(testEnv CURL::libcurl)
target_link_libraries(testEnv OpenSSL::Crypto)
target_link_libraries(testEnv protobuf::libprotobuf)
target_link_libraries(testEnv fmt::fmt)
target_link_libraries(testEnv file_embed)
#set filename to native.dll
set_target_properties(testEnv PROPERTIES PREFIX "")
set_target_properties(testEnv PROPERTIES OUTPUT_NAME "native")
#collect all needed libraries to run
if (WIN32)
message("Collecting libraries [Windows]")
target_link_libraries(testEnv -static)
else ()
message("Collecting libraries [Linux]")
#experimental filesystem linking
target_link_libraries(testEnv -lstdc++fs -static-libstdc++ -static-libgcc)
endif ()
What may be an issue? I use mingw x64 gcc and everything compile fine, i use vcpkg for libraries like libcurl