conan-io / conan

Conan - The open-source C and C++ package manager
https://conan.io
MIT License
8.16k stars 973 forks source link

[question] Android Studio: cannot find any of the libraries built by conan. #7519

Closed babhijit closed 4 years ago

babhijit commented 4 years ago

Trying to use paho with ssl using Conan.

While building in Android Studio 4.0.1 I am getting error: cannot find -lpaho-mqttpp3, cannot find -lpaho-mqtt3as-static, cannot find -lssl, cannot find -lcrypto

conanfile.txt

[requires]
openssl/1.1.1g
paho-mqtt-cpp/1.1

[generators]
cmake

[options]
paho-mqtt-cpp:ssl=True

android_29_x86_clang

include(default)
[settings]
arch=x86
build_type=Debug
compiler=clang
compiler.libcxx=libc++
compiler.version=9
os=Android
os.api_level=29
[build_requires]
android_ndk_installer/r21d@bincrafters/stable
[options]
[env]

CMakeLists.txt

cmake_minimum_required(VERSION 3.10.2)

include(${CMAKE_CURRENT_SOURCE_DIR}/conan_build/conanbuildinfo.cmake)
set(CMAKE_CXX_COMPILER_VERSION "9.0.8") # Unknown miss-detection of the compiler by CMake
conan_basic_setup(TARGETS)

add_library( # Sets the name of the library.
        native-lib
        SHARED
        native-lib.cpp)

find_library( # Sets the name of the path variable.
        log-lib
        log)

target_link_libraries( # Specifies the target library.
        native-lib
        ${log-lib}
        ${CONAN_LIBS}
        )

build.gradle::conanInstall

task conanInstall {
    def buildDir = new File("app/src/main/cpp/conan_build")
    buildDir.mkdirs()

    // if you have problems running the command try to specify the absolute
    // path to conan (Known problem in MacOSX) /usr/local/bin/conan
    def cmmd = "conan install ../conanfile.txt --profile ../profiles/android_29_x86_clang --build missing "
    print(">> ${cmmd} \n")

    def sout = new StringBuilder(), serr = new StringBuilder()
    def proc = cmmd.execute(null, buildDir)
    proc.consumeProcessOutput(sout, serr)
    proc.waitFor()
    println "$sout $serr"
    if (proc.exitValue() != 0) {
        throw new Exception("out> $sout err> $serr" + "\nCommand: ${cmmd}")
    }
}

in externalNativeBuild for CMake I am setting cppFlags "-std=c++14 -frtti -fexceptions -stdlib=libc++"

I can see that Conan is able to build the libraries without any problems but as the Conan built libraries are attempted to be linked, the build breaks.

Here's an excerpt of output:

[0/1] Re-running CMake...
-- Conan: Adjusting output directories
-- Conan: Using cmake targets configuration
-- Library paho-mqttpp3 found /Users/in-abhijit.b/.conan/data/paho-mqtt-cpp/1.1/_/_/package/9f96d6658ee788676fb7f928ba4a36f123ade05b/lib/libpaho-mqttpp3.a
-- Library paho-mqtt3as-static found /Users/in-abhijit.b/.conan/data/paho-mqtt-c/1.3.1/_/_/package/d6dff33203c1fd032290c722770b1d08abf1de17/lib/libpaho-mqtt3as-static.a
-- Library ssl found /Users/in-abhijit.b/.conan/data/openssl/1.1.1g/_/_/package/a07e5697dec8334df38a8d6412eb8a4deab5fdfe/lib/libssl.a
-- Library crypto found /Users/in-abhijit.b/.conan/data/openssl/1.1.1g/_/_/package/a07e5697dec8334df38a8d6412eb8a4deab5fdfe/lib/libcrypto.a
-- Conan: Adjusting default RPATHs Conan policies
-- Conan: Adjusting language standard
-- Current conanbuildinfo.cmake directory: /Users/in-abhijit.b/PlayGround/Android/Conan/MqttClientPoc/app/src/main/cpp/conan_build
-- Conan: Compiler Clang>=8, checking major version 9
-- Conan: Checking correct version: 9
-- Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY OPENSSL_INCLUDE_DIR) 
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/in-abhijit.b/PlayGround/Android/Conan/MqttClientPoc/app/.cxx/cmake/debug/x86
[1/2] Building CXX object CMakeFiles/native-lib.dir/native-lib.cpp.o
[2/2] Linking CXX shared library lib/libnative-lib.so
FAILED: lib/libnative-lib.so 
: && /Users/in-abhijit.b/Library/Android/sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=i686-none-linux-android28 --gcc-toolchain=/Users/in-abhijit.b/Library/Android/sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/darwin-x86_64 --sysroot=/Users/in-abhijit.b/Library/Android/sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security  -std=c++14 -frtti -fexceptions  -O0 -fno-limit-debug-info  -Wl,--exclude-libs,libgcc_real.a -Wl,--exclude-libs,libatomic.a -Wl,--build-id -Wl,--fatal-warnings -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libnative-lib.so -o lib/libnative-lib.so CMakeFiles/native-lib.dir/native-lib.cpp.o  -llog -lpaho-mqttpp3 -lpaho-mqtt3as-static -lssl -lcrypto -lc -latomic -lm && :
/Users/in-abhijit.b/Library/Android/sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/darwin-x86_64/lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/bin/ld: error: cannot find -lpaho-mqttpp3
/Users/in-abhijit.b/Library/Android/sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/darwin-x86_64/lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/bin/ld: error: cannot find -lpaho-mqtt3as-static
/Users/in-abhijit.b/Library/Android/sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/darwin-x86_64/lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/bin/ld: error: cannot find -lssl
/Users/in-abhijit.b/Library/Android/sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/darwin-x86_64/lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/bin/ld: error: cannot find -lcrypto
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.

FAILURE: Build failed with an exception.

What changes are required to make it work?

babhijit commented 4 years ago

Duplicate