libpqxx: Cannot build using mingw on Ubuntu and conan
Hey,
when I try to build an app that uses this library and wxWidgets. When ever I try to build the app using mingw on Ubuntu it fails with the following error:
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(main.cpp.obj):main.cpp:(.text.startup+0x2b): undefined reference to `pqxx::internal::demangle_type_name[abi:cxx11](char const*)'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(main.cpp.obj):main.cpp:(.text.startup+0x4a): undefined reference to `pqxx::internal::demangle_type_name[abi:cxx11](char const*)'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(main.cpp.obj):main.cpp:(.text.startup+0x89): undefined reference to `pqxx::internal::demangle_type_name[abi:cxx11](char const*)'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(main.cpp.obj):main.cpp:(.text.startup+0xa8): undefined reference to `pqxx::internal::demangle_type_name[abi:cxx11](char const*)'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainApp.cpp.obj):MainApp.cpp:(.text.startup+0x2b): undefined reference to `pqxx::internal::demangle_type_name[abi:cxx11](char const*)'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainApp.cpp.obj):MainApp.cpp:(.text.startup+0x4a): more undefined references to `pqxx::internal::demangle_type_name[abi:cxx11](char const*)' follow
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x24b9): undefined reference to `pqxx::connection::init(char const*)'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x24f4): undefined reference to `pqxx::internal::basic_transaction::basic_transaction(pqxx::connection&, pqxx::zview)'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x253d): undefined reference to `pqxx::connection::esc[abi:cxx11](std::basic_string_view<char, std::char_traits<char> >) const'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x274a): undefined reference to `pqxx::transaction_base::exec(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2782): undefined reference to `pqxx::result::begin() const'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x278a): undefined reference to `pqxx::result::size() const'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2794): undefined reference to `pqxx::result::columns() const'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x27b5): undefined reference to `pqxx::row::row(pqxx::result const&, int, int)'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2e23): undefined reference to `pqxx::row::operator[](pqxx::zview) const'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2e2b): undefined reference to `pqxx::field::is_null() const'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2e3b): undefined reference to `pqxx::field::size() const'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2e46): undefined reference to `pqxx::field::c_str() const &'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2e5e): undefined reference to `pqxx::internal::float_traits<float>::from_string(std::basic_string_view<char, std::char_traits<char> >)'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2e92): undefined reference to `pqxx::row::operator[](pqxx::zview) const'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2e9a): undefined reference to `pqxx::field::is_null() const'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2eaa): undefined reference to `pqxx::field::size() const'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2eb5): undefined reference to `pqxx::field::c_str() const &'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2ecd): undefined reference to `pqxx::internal::float_traits<float>::from_string(std::basic_string_view<char, std::char_traits<char> >)'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2f02): undefined reference to `pqxx::row::operator[](pqxx::zview) const'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2f0a): undefined reference to `pqxx::field::is_null() const'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2f1a): undefined reference to `pqxx::field::size() const'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2f25): undefined reference to `pqxx::field::c_str() const &'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2f3d): undefined reference to `pqxx::internal::float_traits<double>::from_string(std::basic_string_view<char, std::char_traits<char> >)'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2f73): undefined reference to `pqxx::row::operator[](pqxx::zview) const'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2f7b): undefined reference to `pqxx::field::is_null() const'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2f8b): undefined reference to `pqxx::field::size() const'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2f96): undefined reference to `pqxx::field::c_str() const &'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2fae): undefined reference to `pqxx::internal::float_traits<double>::from_string(std::basic_string_view<char, std::char_traits<char> >)'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2fed): undefined reference to `pqxx::row::operator[](pqxx::zview) const'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x2ff5): undefined reference to `pqxx::field::c_str() const &'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x310d): undefined reference to `pqxx::row::operator[](pqxx::zview) const'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x3115): undefined reference to `pqxx::field::c_str() const &'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x3225): undefined reference to `pqxx::row::operator[](pqxx::zview) const'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x322d): undefined reference to `pqxx::field::c_str() const &'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x3aed): undefined reference to `pqxx::transaction_base::commit()'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x3c9e): undefined reference to `pqxx::transaction_base::close()'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x3ca6): undefined reference to `pqxx::internal::basic_transaction::~basic_transaction()'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x3cb3): undefined reference to `pqxx::connection::close()'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x3f2d): undefined reference to `pqxx::internal::check_pqxx_version_7_7()'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x422f): undefined reference to `pqxx::internal::throw_null_conversion(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x423b): undefined reference to `pqxx::internal::throw_null_conversion(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x4247): undefined reference to `pqxx::internal::throw_null_conversion(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x4253): undefined reference to `pqxx::internal::throw_null_conversion(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x43a5): undefined reference to `pqxx::transaction_base::close()'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text+0x43ad): undefined reference to `pqxx::internal::basic_transaction::~basic_transaction()'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text$_ZN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EED1Ev[_ZN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EED1Ev]+0x14): undefined reference to `pqxx::transaction_base::close()'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text$_ZN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EED1Ev[_ZN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EED1Ev]+0x22): undefined reference to `pqxx::internal::basic_transaction::~basic_transaction()'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text$_ZN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EED0Ev[_ZN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EED0Ev]+0x14): undefined reference to `pqxx::transaction_base::close()'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text$_ZN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EED0Ev[_ZN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EED0Ev]+0x1c): undefined reference to `pqxx::internal::basic_transaction::~basic_transaction()'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text$_ZN4pqxx10connectionD1Ev[_ZN4pqxx10connectionD1Ev]+0xc): undefined reference to `pqxx::connection::close()'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text.startup+0x2b): undefined reference to `pqxx::internal::demangle_type_name[abi:cxx11](char const*)'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text.startup+0x4a): undefined reference to `pqxx::internal::demangle_type_name[abi:cxx11](char const*)'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text.startup+0x78): undefined reference to `pqxx::internal::demangle_type_name[abi:cxx11](char const*)'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text.startup+0xa6): undefined reference to `pqxx::internal::demangle_type_name[abi:cxx11](char const*)'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text.startup+0xd4): undefined reference to `pqxx::internal::demangle_type_name[abi:cxx11](char const*)'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.text.startup+0xf3): more undefined references to `pqxx::internal::demangle_type_name[abi:cxx11](char const*)' follow
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.rdata$_ZTVN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EEE[_ZTVN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EEE]+0x20): undefined reference to `pqxx::internal::basic_transaction::do_commit()'
/usr/bin/x86_64-w64-mingw32-ld: CMakeFiles/filament_manager.dir/objects.a(MainWindow.cpp.obj):MainWindow.cpp:(.rdata$_ZTVN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EEE[_ZTVN4pqxx11transactionILNS_15isolation_levelE0ELNS_12write_policyE1EEE]+0x28): undefined reference to `pqxx::transaction_base::do_abort()'
collect2: error: ld returned 1 exit status
gmake[2]: *** [CMakeFiles/filament_manager.dir/build.make:151: bin/filament_manager.exe] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:526: CMakeFiles/filament_manager.dir/all] Error 2
gmake: *** [Makefile:149: all] Error 2
The command '/bin/sh -c cmake --build build/' returned a non-zero code: 2
The issue can be reproduced with the following Dockerfile:
FROM ubuntu:rolling
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get upgrade -y
RUN apt-get install mingw-w64 mingw-w64-x86-64-dev g++-mingw-w64-x86-64 gcc-mingw-w64-x86-64 binutils-mingw-w64-x86-64 build-essential cmake git wget -y
RUN wget https://github.com/conan-io/conan/releases/latest/download/conan-ubuntu-64.deb
RUN dpkg -i conan-ubuntu-64.deb
RUN git clone https://github.com/DerKnerd/filament-browser.git
WORKDIR /filament-browser
RUN git checkout e513b687d92de70bd83ad100b642032c8c44124c
RUN git submodule update --init --recursive
RUN cmake -DCMAKE_TOOLCHAIN_FILE=/filament-browser/mingw-w64-x86_64.cmake -B build -S /filament-browser -DCMAKE_BUILD_TYPE=Release
RUN cmake --build build/
And here is the CMakeList.txt I use:
cmake_minimum_required(VERSION 3.16)
project(filament_manager CXX)
set(CMAKE_CXX_STANDARD 20)
include(./ucm.cmake)
include(./conan.cmake)
ucm_set_runtime(STATIC)
if (WIN32 OR MINGW)
add_compile_definitions(__WXMSW__ _UNICODE)
set(BUILD_SHARED_LIBS false)
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_SYSTEM_PROCESSOR x86_64)
set(CONAN_ARCHITECTURE x86_64)
set(CMAKE_WIN32_EXECUTABLE 1)
set(options Poco:enable_netssl_win=True Poco:enable_netssl=False)
conan_cmake_run(
BASIC_SETUP
ARCH ${CONAN_ARCHITECTURE}
ENV CC=${CMAKE_C_COMPILER}
ENV CXX=${CMAKE_CXX_COMPILER}
ENV CFLAGS=${CMAKE_C_FLAGS}
ENV CXXFLAGS=${CMAKE_CXX_FLAGS}
SETTINGS os=Windows
SETTINGS compiler.cppstd=20
)
endif ()
set(wxUSE_STL ON)
set(wxBUILD_SHARED OFF)
add_subdirectory(libs/wxWidgets)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR})
list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR})
conan_cmake_configure(
REQUIRES libpqxx/7.7.0
GENERATORS cmake_find_package
)
conan_cmake_autodetect(settings)
conan_cmake_install(PATH_OR_REFERENCE .
BUILD missing
REMOTE conancenter
SETTINGS ${settings}
SETTINGS ${CONAN_SETTINGS}
OPTIONS Poco:enable_netssl_win=True Poco:enable_netssl=False)
find_package(libpqxx)
add_executable(filament_manager ${target} main.cpp MainApp.h MainApp.cpp MainWindow.cpp MainWindow.h)
target_link_libraries(filament_manager PRIVATE libpqxx::libpqxx wx::core wx::base)
And this is the toolchain file:
# Sample toolchain file for building for Windows from an Ubuntu Linux system.
#
# Typical usage:
# *) install cross compiler: `sudo apt-get install mingw-w64`
# *) cd build
# *) cmake -DCMAKE_TOOLCHAIN_FILE=~/mingw-w64-x86_64.cmake ..
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)
Do you by any chance know what causes this issue?
About this issue
- Original URL
- State: closed
- Created 2 years ago
- Comments: 41 (25 by maintainers)
Messed up 7.7.1, so did a new release: 7.7.2.
I create PR #550, this change should avoid the
stat: libs/libpqxx/src/libpqxx.a: Too many levels of symbolic linkserror.