libpqxx: Cant static link

I have the following code:


#include <iostream>
#include <pqxx/pqxx>

//This project was created to check if everything is working before creating GDNative stuff
pqxx::connection conn;

int main()
{
    try
    {
        conn = pqxx::connection(
            "user=postgres "
            "host="
            "password="
            "dbname=postgres "
            "port=5432"
        );

    }
    catch(const std::exception& e)
    {
        std::cerr << e.what() << '\n';
        return -1;
    }


    
    std::cout << "Hello world" << std::endl;
    return 0;
}

I’m trying to compile with static linking:

[nonunknown@knownpc standalone]$ g++ main.cpp -L/usr/local/lib -l:libpqxx-7.7.a


/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::encrypt_password[abi:cxx11](char const*, char const*)":
connection.cxx:(.text+0x71): referência não definida para "PQencryptPassword"
/usr/bin/ld: connection.cxx:(.text+0x7f): referência não definida para "PQfreemem"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::connection(pqxx::connection::connect_mode, pqxx::zview)":
connection.cxx:(.text+0x219): referência não definida para "PQconnectStart"
/usr/bin/ld: connection.cxx:(.text+0x2d1): referência não definida para "PQerrorMessage"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::poll_connect()":
connection.cxx:(.text+0x3d1): referência não definida para "PQconnectPoll"
/usr/bin/ld: connection.cxx:(.text+0x424): referência não definida para "PQerrorMessage"
/usr/bin/ld: connection.cxx:(.text+0x4fc): referência não definida para "PQerrorMessage"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::complete_init()":
connection.cxx:(.text+0x7f0): referência não definida para "PQerrorMessage"
/usr/bin/ld: connection.cxx:(.text+0x8b9): referência não definida para "PQfinish"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::init(char const*)":
connection.cxx:(.text+0x918): referência não definida para "PQconnectdb"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::init(char const**, char const**)":
connection.cxx:(.text+0x95a): referência não definida para "PQconnectdbParams"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::backendpid() const &":
connection.cxx:(.text+0x1199): referência não definida para "PQbackendPID"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "(anonymous namespace)::socket_of(pg_conn const*)":
connection.cxx:(.text+0x11c1): referência não definida para "PQsocket"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::protocol_version() const":
connection.cxx:(.text+0x120f): referência não definida para "PQprotocolVersion"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::server_version() const":
connection.cxx:(.text+0x1233): referência não definida para "PQserverVersion"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::set_up_state()":
connection.cxx:(.text+0x1a1c): referência não definida para "PQsetNoticeProcessor"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::trace(_IO_FILE*)":
connection.cxx:(.text+0x1e9d): referência não definida para "PQtrace"
/usr/bin/ld: connection.cxx:(.text+0x1eae): referência não definida para "PQuntrace"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::add_receiver(pqxx::notification_receiver*)":
connection.cxx:(.text+0x20c3): referência não definida para "PQexec"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::consume_input()":
connection.cxx:(.text+0x25b1): referência não definida para "PQconsumeInput"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::is_busy() const":
connection.cxx:(.text+0x25d3): referência não definida para "PQisBusy"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::cancel_query()":
connection.cxx:(.text+0x2610): referência não definida para "PQgetCancel"
/usr/bin/ld: connection.cxx:(.text+0x2621): referência não definida para "PQfreeCancel"
/usr/bin/ld: connection.cxx:(.text+0x26ea): referência não definida para "PQcancel"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::set_verbosity(pqxx::error_verbosity) &":
connection.cxx:(.text+0x2afd): referência não definida para "PQsetErrorVerbosity"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "(anonymous namespace)::get_notif(pg_conn*)":
connection.cxx:(.text+0x2b2b): referência não definida para "PQfreemem"
/usr/bin/ld: connection.cxx:(.text+0x2b42): referência não definida para "PQnotifies"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::dbname() const":
connection.cxx:(.text+0x30df): referência não definida para "PQdb"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::username() const":
connection.cxx:(.text+0x30fd): referência não definida para "PQuser"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::hostname() const":
connection.cxx:(.text+0x311b): referência não definida para "PQhost"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::port() const":
connection.cxx:(.text+0x3139): referência não definida para "PQport"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::err_msg() const":
connection.cxx:(.text+0x3163): referência não definida para "PQerrorMessage"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::register_errorhandler(pqxx::errorhandler*)":
connection.cxx:(.text+0x31af): referência não definida para "PQsetNoticeProcessor"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::unregister_errorhandler(pqxx::errorhandler*)":
connection.cxx:(.text+0x3223): referência não definida para "PQsetNoticeProcessor"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::exec(std::shared_ptr<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string_view<char, std::char_traits<char> >)":
connection.cxx:(.text+0x33e4): referência não definida para "PQexec"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::encrypt_password[abi:cxx11](char const*, char const*, char const*)::{lambda(char const*)#1}::operator()(char const*) const":
connection.cxx:(.text+0x346c): referência não definida para "PQfreemem"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::encrypt_password[abi:cxx11](char const*, char const*, char const*)":
connection.cxx:(.text+0x34cc): referência não definida para "PQencryptPasswordConn"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::prepare(char const*, char const*) &":
connection.cxx:(.text+0x364b): referência não definida para "PQprepare"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::exec_prepared(std::basic_string_view<char, std::char_traits<char> >, pqxx::internal::c_params const&)":
connection.cxx:(.text+0x3961): referência não definida para "PQexecPrepared"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::close()":
connection.cxx:(.text+0x3c2e): referência não definida para "PQfinish"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::status() const":
connection.cxx:(.text+0x3d09): referência não definida para "PQstatus"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::read_copy_line()":
connection.cxx:(.text+0x4040): referência não definida para "PQgetCopyData"
/usr/bin/ld: connection.cxx:(.text+0x4112): referência não definida para "PQgetResult"
/usr/bin/ld: connection.cxx:(.text+0x4205): referência não definida para "PQfreemem"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::write_copy_line(std::basic_string_view<char, std::char_traits<char> >)":
connection.cxx:(.text+0x4466): referência não definida para "PQputCopyData"
/usr/bin/ld: connection.cxx:(.text+0x44f6): referência não definida para "PQputCopyData"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::end_copy_write()":
connection.cxx:(.text+0x4645): referência não definida para "PQputCopyEnd"
/usr/bin/ld: connection.cxx:(.text+0x486b): referência não definida para "PQgetResult"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::start_exec(char const*)":
connection.cxx:(.text+0x49a8): referência não definida para "PQsendQuery"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::get_result()":
connection.cxx:(.text+0x4a9f): referência não definida para "PQgetResult"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::esc_to_buf(std::basic_string_view<char, std::char_traits<char> >, char*) const":
connection.cxx:(.text+0x4b17): referência não definida para "PQescapeStringConn"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::unesc_raw[abi:cxx11](char const*) const":
connection.cxx:(.text+0x4e71): referência não definida para "PQunescapeBytea"
/usr/bin/ld: connection.cxx:(.text+0x4e7f): referência não definida para "PQfreemem"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::quote_name[abi:cxx11](std::basic_string_view<char, std::char_traits<char> >) const":
connection.cxx:(.text+0x5243): referência não definida para "PQescapeIdentifier"
/usr/bin/ld: connection.cxx:(.text+0x5251): referência não definida para "PQfreemem"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::set_client_encoding(char const*) &":
connection.cxx:(.text+0x59b0): referência não definida para "PQsetClientEncoding"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::encoding_id() const":
connection.cxx:(.text+0x5c03): referência não definida para "PQclientEncoding"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::exec_params(std::basic_string_view<char, std::char_traits<char> >, pqxx::internal::c_params const&)":
connection.cxx:(.text+0x5e9c): referência não definida para "PQexecParams"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(connection.cxx.o): na função "pqxx::connection::connection_string[abi:cxx11]() const":
connection.cxx:(.text+0x605d): referência não definida para "PQconninfo"
/usr/bin/ld: connection.cxx:(.text+0x606b): referência não definida para "PQconninfoFree"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(encodings.cxx.o): na função "pqxx::internal::name_encoding(int)":
encodings.cxx:(.text+0x1849): referência não definida para "pg_encoding_to_char"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(result.cxx.o): na função "pqxx::internal::clear_result(pg_result const*)":
result.cxx:(.text+0x14): referência não definida para "PQclear"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(result.cxx.o): na função "pqxx::result::size() const":
result.cxx:(.text+0x3e3): referência não definida para "PQntuples"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(result.cxx.o): na função "pqxx::result::empty() const":
result.cxx:(.text+0x41d): referência não definida para "PQntuples"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(result.cxx.o): na função "pqxx::result::throw_sql_error(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const":
result.cxx:(.text+0x87c): referência não definida para "PQresultErrorField"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(result.cxx.o): na função "pqxx::result::status_error[abi:cxx11]() const":
result.cxx:(.text+0x1914): referência não definida para "PQresultStatus"
/usr/bin/ld: result.cxx:(.text+0x194e): referência não definida para "PQresultErrorMessage"
/usr/bin/ld: result.cxx:(.text+0x1983): referência não definida para "PQresultStatus"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(result.cxx.o): na função "pqxx::result::cmd_status() const":
result.cxx:(.text+0x1a86): referência não definida para "PQcmdStatus"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(result.cxx.o): na função "pqxx::result::inserted_oid() const":
result.cxx:(.text+0x1b82): referência não definida para "PQoidValue"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(result.cxx.o): na função "pqxx::result::affected_rows() const":
result.cxx:(.text+0x1bf4): referência não definida para "PQcmdTuples"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(result.cxx.o): na função "pqxx::result::get_value(int, int) const":
result.cxx:(.text+0x1c49): referência não definida para "PQgetvalue"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(result.cxx.o): na função "pqxx::result::get_is_null(int, int) const":
result.cxx:(.text+0x1c7d): referência não definida para "PQgetisnull"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(result.cxx.o): na função "pqxx::result::get_length(int, int) const":
result.cxx:(.text+0x1cb5): referência não definida para "PQgetlength"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(result.cxx.o): na função "pqxx::result::column_type(int) const":
result.cxx:(.text+0x1cf7): referência não definida para "PQftype"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(result.cxx.o): na função "pqxx::result::column_number(pqxx::zview) const":
result.cxx:(.text+0x1e02): referência não definida para "PQfnumber"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(result.cxx.o): na função "pqxx::result::column_table(int) const":
result.cxx:(.text+0x1efd): referência não definida para "PQftable"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(result.cxx.o): na função "pqxx::result::table_column(int) const":
result.cxx:(.text+0x201f): referência não definida para "PQftablecol"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(result.cxx.o): na função "pqxx::result::errorposition() const":
result.cxx:(.text+0x232d): referência não definida para "PQresultErrorField"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(result.cxx.o): na função "pqxx::result::column_name(int) const &":
result.cxx:(.text+0x23b7): referência não definida para "PQfname"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(result.cxx.o): na função "pqxx::result::columns() const":
result.cxx:(.text+0x2579): referência não definida para "PQnfields"
/usr/bin/ld: /usr/local/lib/libpqxx-7.7.a(util.cxx.o): na função "pqxx::describe_thread_safety()":
util.cxx:(.text+0x2d): referência não definida para "PQisthreadsafe"
collect2: error: ld returned 1 exit status

basically those errors are undefined reference

So I’m trying to create a dinamyc library for godo (.so) but I need to include libpqxx inside this .so, but this error doesnt let me do that!

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 35 (17 by maintainers)

Most upvoted comments

Nice. Feel free to file a new ticket if there’s another problem with libpqxx - I like to have one technical issue per ticket where possible. Helps others who search the Internet for specific problems.

And I guess we can close this one now… I’ll give you a bit of time to be sure though. 😃

@FelipeRamones did it work?