首次在Gentoo上使用POCO C++库

First time POCO C++ library use on Gentoo

本文关键字:POCO C++ Gentoo      更新时间:2023-10-16

我通过emerge安装了POCO,第一次尝试编译时我就得到了

undefined reference to `Poco::RefCountedObject::RefCountedObject()

这清楚地表明它没有找到图书馆。没有出现为你做链接吗?

如何在Gentoo中编译或正确链接POCO,以便它找到libs?

#include "Poco/ActiveMethod.h"
#include "Poco/ActiveResult.h"
#include <utility>
#include <iostream>
using Poco::ActiveMethod;
using Poco::ActiveResult;
class ActiveAdder
{
public:
    ActiveAdder(): add(this, &ActiveAdder::addImpl)
    {
    }
    ActiveMethod<int, std::pair<int, int>, ActiveAdder> add;
private:
    int addImpl(const std::pair<int, int>& args)
    {
        return args.first + args.second;
    }
};
int main(int argc, char** argv)
{
    ActiveAdder adder;
    ActiveResult<int> sum = adder.add(std::make_pair(1, 2));
    // do other things
    sum.wait();
    std::cout << sum.data() << std::endl;
    return 0;
}

POCO gentoo-ebuild具有use标志,这些标志启用了POCO的某些部分。

feniks@charlotte  ~  equery uses poco
[ Legend : U - final flag setting for installation]
[        : I - package is installed with flag     ]
[ Colors : set, unset                             ]
 * Found these USE flags for dev-libs/poco-1.6.0:
 U I
 + + 7z                : <unknown>
 + + apache2           : Add Apache2 support
 + + cppparser         : <unknown>
 + + crypto            : <unknown>
 + + data              : <unknown>
 + + doc               : Add extra documentation (API, Javadoc, etc). It is recommended to enable per package instead
                         of globally
 + + file2pagecompiler : <unknown>
 - - iodbc             : Add support for iODBC library
 + + json              : <unknown>
 - - mongodb           : <unknown>
 + + mysql             : Add mySQL Database support
 + + net               : <unknown>
 - - odbc              : Add ODBC Support (Open DataBase Connectivity)
 + + pagecompiler      : <unknown>
 + + pdf               : Add general support for PDF (Portable Document Format), this replaces the pdflib and cpdflib
                         flags
 + + sqlite            : Add support for sqlite - embedded sql database
 + + ssl               : Add support for Secure Socket Layer connections
 + + tests             : <unknown>
 + + util              : <unknown>
 + + xml               : Add support for XML files
 + + zip               : <unknown>

此外,您应该将您的程序与poco本身链接起来。PocoFoundation中的所有基本类(就像您的情况一样)。

例如,这里是我的链接标志(由CMake生成):

test.o /usr/lib64/libPocoJSON.so.30 /usr/lib64/libPocoXML.so.30 -lboost_program_options-mt -lboost_locale-mt -lboost_system-mt -lboost_filesystem-mt cpsp/libtinyhttp_cpsp.a api/libtinyhttp_api.a /usr/lib64/libPocoFoundation.so.1.6.0 -lpcre -lz -lpthread -ldl -lrt -lexpat 

使用QT网络套接字!!!!!!!!!!!!!!