minio / minio-cpp

MinIO C++ Client SDK for Amazon S3 Compatible Cloud Storage
https://minio-cpp.min.io/
Apache License 2.0
127 stars 53 forks source link

Compilation Error: ld Returns 1, Undefined Reference to dlopen and Other Functions #96

Closed tthh7 closed 11 months ago

tthh7 commented 11 months ago

root@lbh-virtual-machine:/home/lbh/minio-cpp# cmake --build ./build --config Release [ 10%] Built target miniocpp [ 11%] Linking CXX executable GetObjectProgress ../vcpkg_installed/x64-linux/debug/lib/libcrypto.a(libcrypto-lib-dso_dlfcn.o):在函数‘dlfcn_load’中: /home/lbh/minio-cpp/vcpkg-master/buildtrees/openssl/x64-linux-dbg/../src/nssl-3.1.3-22892fd447.clean/crypto/dso/dso_dlfcn.c:116:对‘dlopen’未定义的引用 /home/lbh/minio-cpp/vcpkg-master/buildtrees/openssl/x64-linux-dbg/../src/nssl-3.1.3-22892fd447.clean/crypto/dso/dso_dlfcn.c:118:对‘dlerror’未定义的引用 /home/lbh/minio-cpp/vcpkg-master/buildtrees/openssl/x64-linux-dbg/../src/nssl-3.1.3-22892fd447.clean/crypto/dso/dso_dlfcn.c:138:对‘dlclose’未定义的引用 ../vcpkg_installed/x64-linux/debug/lib/libcrypto.a(libcrypto-lib-dso_dlfcn.o):在函数‘dlfcn_unload’中: /home/lbh/minio-cpp/vcpkg-master/buildtrees/openssl/x64-linux-dbg/../src/nssl-3.1.3-22892fd447.clean/crypto/dso/dso_dlfcn.c:161:对‘dlclose’未定义的引用 ../vcpkg_installed/x64-linux/debug/lib/libcrypto.a(libcrypto-lib-dso_dlfcn.o):在函数‘dlfcn_bind_func’中: /home/lbh/minio-cpp/vcpkg-master/buildtrees/openssl/x64-linux-dbg/../src/nssl-3.1.3-22892fd447.clean/crypto/dso/dso_dlfcn.c:186:对‘dlsym’未定义的引用 /home/lbh/minio-cpp/vcpkg-master/buildtrees/openssl/x64-linux-dbg/../src/nssl-3.1.3-22892fd447.clean/crypto/dso/dso_dlfcn.c:188:对‘dlerror’未定义的引用 ../vcpkg_installed/x64-linux/debug/lib/libcrypto.a(libcrypto-lib-dso_dlfcn.o):在函数‘dlfcn_pathbyaddr’中: /home/lbh/minio-cpp/vcpkg-master/buildtrees/openssl/x64-linux-dbg/../src/nssl-3.1.3-22892fd447.clean/crypto/dso/dso_dlfcn.c:422:对‘dladdr’未定义的引用 /home/lbh/minio-cpp/vcpkg-master/buildtrees/openssl/x64-linux-dbg/../src/nssl-3.1.3-22892fd447.clean/crypto/dso/dso_dlfcn.c:440:对‘dlerror’未定义的引用 ../vcpkg_installed/x64-linux/debug/lib/libcrypto.a(libcrypto-lib-dso_dlfcn.o):在函数‘dlfcn_globallookup’中: /home/lbh/minio-cpp/vcpkg-master/buildtrees/openssl/x64-linux-dbg/../src/nssl-3.1.3-22892fd447.clean/crypto/dso/dso_dlfcn.c:447:对‘dlopen’未定义的引用 /home/lbh/minio-cpp/vcpkg-master/buildtrees/openssl/x64-linux-dbg/../src/nssl-3.1.3-22892fd447.clean/crypto/dso/dso_dlfcn.c:450:对‘dlsym’未定义的引用 /home/lbh/minio-cpp/vcpkg-master/buildtrees/openssl/x64-linux-dbg/../src/nssl-3.1.3-22892fd447.clean/crypto/dso/dso_dlfcn.c:451:对‘dlclose’未定义的引用 collect2: error: ld returned 1 exit status examples/CMakeFiles/GetObjectProgress.dir/build.make:105: recipe for target 'examples/GetObjectProgress' failed make[2]: [examples/GetObjectProgress] Error 1 CMakeFiles/Makefile2:258: recipe for target 'examples/CMakeFiles/GetObjectProgress.dir/all' failed make[1]: [examples/CMakeFiles/GetObjectProgress.dir/all] Error 2 Makefile:129: recipe for target 'all' failed make: *** [all] Error 2

How to resolve this issue, please help me

balamurugana commented 11 months ago

Below CMakefiles.txt works fine with released minio-cpp

cmake_minimum_required(VERSION 3.10)
project(hello)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)

if("${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}")
  message(FATAL_ERROR "FATAL: In-source builds are not allowed. You should create a separate directory for build files.")
endif()

set(requiredlibs)

if(CMAKE_COMPILER_IS_GNUCC)
  set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -Werror")
  if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0 AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0 AND NOT MINGW)
    list(APPEND requiredlibs stdc++fs)
  endif()
endif()

find_path(MINIOCPP_INCLUDE_DIRS miniocpp/client.h)
find_library(MINIOCPP_LIBRARIES miniocpp)
include_directories(${MINIOCPP_INCLUDE_DIRS})
list(APPEND requiredlibs ${MINIOCPP_LIBRARIES})

message(STATUS "Found required libs: ${requiredlibs}")

add_executable(hello main.cpp)
target_link_libraries(hello ${requiredlibs})
tthh7 commented 11 months ago

Below CMakefiles.txt works fine with released minio-cpp

cmake_minimum_required(VERSION 3.10)
project(hello)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)

if("${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}")
  message(FATAL_ERROR "FATAL: In-source builds are not allowed. You should create a separate directory for build files.")
endif()

set(requiredlibs)

if(CMAKE_COMPILER_IS_GNUCC)
  set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -Werror")
  if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0 AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0 AND NOT MINGW)
    list(APPEND requiredlibs stdc++fs)
  endif()
endif()

find_path(MINIOCPP_INCLUDE_DIRS miniocpp/client.h)
find_library(MINIOCPP_LIBRARIES miniocpp)
include_directories(${MINIOCPP_INCLUDE_DIRS})
list(APPEND requiredlibs ${MINIOCPP_LIBRARIES})

message(STATUS "Found required libs: ${requiredlibs}")

add_executable(hello main.cpp)
target_link_libraries(hello ${requiredlibs})

You may have misunderstood. I encountered the aforementioned error while building the minio-cpp library from source. My system is Ubuntu 18.04, and the GCC version is 11.4.0. How can I resolve the error? Your guidance would be greatly appreciated.