【问题标题】:Travis CI won't link Poco C++ or external .a filesTravis CI 不会链接 Poco C++ 或外部 .a 文件
【发布时间】:2018-04-09 06:46:39
【问题描述】:

我安装了新版本的 Ubuntu 16.04.4 LTS 并且能够使用 cmake 编译我的项目。和 make 和这个 g++-5 命令

 g++-5 src/*.cpp -pthread -I extern/sleepy-discord/include -I
 extern/poco-1.9.0/Foundation/include -I extern/poco-1.9.0/JSON/include
 -I extern/poco-1.9.0/Net/include -I extern/poco-1.9.0/Util/include -L extern/sleepy-discord/lib/linux -L extern/poco-1.9.0/lib/linux
 -std=c++11 -o bin/tipbot -lPocoJSON -lPocoUtil -lPocoNet -lPocoFoundation -lsleepy_discord -lcurl -lssl -lcrypto

一切都成功构建,没有错误,但在 Travis CI 上,它给出了数百个链接器错误 Travis.yml:

dist: trusty
sudo: false
language: cpp

addons:
  apt:
    sources:
      - ubuntu-toolchain-r-test
    packages:
      - g++-5
      - libcurl4-openssl-dev
      - openssl

script:
  - ls extern/sleepy-discord/lib/linux
  - ls extern/poco-1.9.0/lib/linux
  - g++-5 src/*.cpp -pthread -I extern/sleepy-discord/include -I extern/poco-1.9.0/Foundation/include -I extern/poco-1.9.0/JSON/include -I extern/poco-1.9.0/Net/include -I extern/poco-1.9.0/Util/include -L extern/sleepy-discord/lib/linux -L extern/poco-1.9.0/lib/linux -std=c++11 -o bin/tipbot -lPocoJSON -lPocoUtil -lPocoNet -lPocoFoundation -lsleepy_discord -lcurl -lssl -lcrypto

这是错误,它显然找到了 libPocoJSON.a 文件,但我不明白为什么如果它找到了 .a 文件并找到了 C++11 模板库,它为什么会说“未定义的引用”。

extern/poco-1.9.0/lib/linux/libPocoJSON.a(ParserImpl.o):在函数中 Poco::JSON::ParserImpl::stripComments(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) [clone .part.23]': ParserImpl.cpp:(.text+0x91): undefined reference to std::__cxx11::basic_string, std::allocator >::_M_erase(unsigned long, unsigned long)' extern/poco-1.9.0/lib/linux/libPocoJSON.a(ParserImpl.o):在函数中 void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char*>(char*, char*, std::forward_iterator_tag) [clone .isra.68]': ParserImpl.cpp:(.text+0x1f9): undefined reference to std::__cxx11::basic_string, std::allocator >::_M_create(unsigned long&, unsigned long)' extern/poco-1.9.0/lib/linux/libPocoJSON.a(ParserImpl.o):在函数中 `Poco::JSON::ParserImpl::handle()':

完整的特拉维斯报告: https://travis-ci.org/Brandantl/IntenseCoin-TipBot/builds/363978290?utm_source=github_status&utm_medium=notification

回购: https://github.com/Brandantl/IntenseCoin-TipBot

也可以用cmake .;make编译

【问题讨论】:

    标签: c++11 linker travis-ci poco-libraries


    【解决方案1】:

    问题是你混合使用c++11字符串和c++03字符串,它们有不同的实现。

    也许,您 Travis CI 服务器上的 poco 库或其他库未使用 c++11 标志编译。用-std=c++11 重新编译它,或者用你本地机器上的替换它。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多