微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

代码不会在具有相同操作系统和编译器的不同机器上构建

如何解决代码不会在具有相同操作系统和编译器的不同机器上构建

我似乎找不到太多关于此错误的信息。我有一个 C++ 代码库,我交给我的教授,它有一个构建脚本,可以安装 conan,然后从 conan 安装依赖项。我最初是在 Windows 上编写代码库的,但它在 github 上的 ubuntu:latest CI 上运行良好。它也可以在我移植的本地机器上的 ubuntu:latest docker 容器中正常工作。我的本地 docker 容器说它是 ubuntu 20.04。我的教授有 ubuntu 20.04ubuntu 20.10,都得到相同的错误,这是他们的构建日志

$ cmake --version                                                        
cmake version 3.16.3
9:03
$ gcc --version                                                          
gcc (Ubuntu 10.2.0-13ubuntu1) 10.2.0
copyright (C) 2020 Free Software Foundation,Inc.
9:03
$ conan --version                                                        
Conan version 1.33.1
9:04
$ ./build.sh                                                              
Configuration:
[settings]
arch=x86_64
arch_build=x86_64
build_type=Release
compiler=gcc
compiler.libcxx=libstdc++11
compiler.version=10
os=Linux
os_build=Linux
[options]
[build_requires]
[env]conanfile.txt: Installing package
Requirements
   boost/1.75.0 from 'conan-center' - Cache
   bzip2/1.0.8 from 'conan-center' - Cache
   catch2/2.13.4 from 'conan-center' - Cache
   libiconv/1.16 from 'conan-center' - Cache
   nlohmann_json/3.9.1 from 'conan-center' - Cache
   openssl/1.1.1i from 'conan-center' - Cache
   zlib/1.2.11 from 'conan-center' - Cache
Packages
   boost/1.75.0:91068d6d6067a809e746602e9538e15eddb14457 - Cache
   bzip2/1.0.8:91a8b22c2c5a149bc617cfc06cdd21bf23b12567 - Cache
   catch2/2.13.4:5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9 - Cache
   libiconv/1.16:19729b9559f3ae196cad45cb2b97468ccb75dcd1 - Cache
   nlohmann_json/3.9.1:d1091b2ed420e6d287293709a907ae824d5de508 - Cache
   openssl/1.1.1i:19729b9559f3ae196cad45cb2b97468ccb75dcd1 - Cache
   zlib/1.2.11:19729b9559f3ae196cad45cb2b97468ccb75dcd1 - CacheInstalling (downloading,building) binaries...
bzip2/1.0.8: Already installed!
catch2/2.13.4: Already installed!
libiconv/1.16: Already installed!
libiconv/1.16: Appending PATH environment var: .conan/data/libiconv/1.16/_/_/package/19729b95
59f3ae196cad45cb2b97468ccb75dcd1/bin                                                                         
nlohmann_json/3.9.1: Already installed!
openssl/1.1.1i: Already installed!
zlib/1.2.11: Already installed!
boost/1.75.0: Already installed!
boost/1.75.0: WARN: Picked up a system libbacktrace library
conanfile.txt: Generator txt created conanbuildinfo.txt
conanfile.txt: Generator cmake created conanbuildinfo.cmake
conanfile.txt: Generated conaninfo.txt
conanfile.txt: Generated graphinfo
-- The C compiler identification is GNU 10.2.0
-- The CXX compiler identification is GNU 10.2.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Conan: Adjusting output directories
-- Conan: Using cmake global configuration
-- Conan: Adjusting default RPATHs Conan policies
-- Conan: Adjusting language standard
-- Current conanbuildinfo.cmake directory: workspace/Spring2021/Capstone/Project1Grading/project/build
-- Conan: Compiler GCC>=5,checking major version 10
-- Conan: Checking correct version: 10
-- Configuring done
-- Generating done
-- Build files have been written to: workspace/Spring2021/Capstone/Project1Grading/project/build
make[1]: Entering directory 'workspace/Spring2021/Capstone/Project1Grading/project/build'
make[2]: Entering directory 'workspace/Spring2021/Capstone/Project1Grading/project/build'
Scanning dependencies of target tests
make[2]: Leaving directory 'workspace/Spring2021/Capstone/Project1Grading/project/build'
make[2]: Entering directory 'workspace/Spring2021/Capstone/Project1Grading/project/build'
[ 14%] Building CXX object CMakeFiles/tests.dir/Source/Connect.cpp.o
In file included from .conan/data/boost/1.75.0/_/_/package/91068d6d6067a809e746602e9538e15edd
b14457/include/boost/asio/ssl/rfc2818_verification.hpp:26,from .conan/data/boost/1.75.0/_/_/package/91068d6d6067a809e746602e9538e15edd
b14457/include/boost/asio/ssl.hpp:21,from workspace/Spring2021/Capstone/Project1Grading/project
/Source/LoadRootCertificate.hpp:13,from workspace/Spring2021/Capstone/Project1Grading/project
/Source/Connect.hpp:26,from workspace/Spring2021/Capstone/Project1Grading/project
/Source/Connect.cpp:16:
.conan/data/boost/1.75.0/_/_/package/91068d6d6067a809e746602e9538e15eddb14457/include/boost/a
sio/detail/push_options.hpp:82:12: error: ‘#pragma’ is not allowed here
  82 | #  pragma GCC visibility push (default)
     |           ^~~
In file included from .conan/data/boost/1.75.0/_/_/package/91068d6d6067a809e746602e9538e15edd
b14457/include/boost/asio/ssl/rfc2818_verification.hpp:92,from workspace/Spring2021/Capstone/Project1Grading/project
/Source/Connect.cpp:16:
.conan/data/boost/1.75.0/_/_/package/91068d6d6067a809e746602e9538e15eddb14457/include/boost/a
sio/detail/pop_options.hpp:74:27: warning: no matching push for ‘#pragma GCC visibility pop’ [-Wpragmas]
  74 | #  pragma GCC visibility pop
     |                          ^~~
In file included from .conan/data/boost/1.75.0/_/_/package/91068d6d6067a809e746602e9538e15edd
b14457/include/boost/asio/ssl/rfc2818_verification.hpp:95,from workspace/Spring2021/Capstone/Project1Grading/project
/Source/Connect.cpp:16:
.conan/data/boost/1.75.0/_/_/package/91068d6d6067a809e746602e9538e15eddb14457/include/boost/a
sio/ssl/impl/rfc2818_verification.ipp:34:6: error: ‘rfc2818_verification’ has not been declared
  34 | bool rfc2818_verification::operator()(
     |     ^~~~~~~~~~~~~~~~~~~~
.conan/data/boost/1.75.0/_/_/package/91068d6d6067a809e746602e9538e15eddb14457/include/boost/a
sio/ssl/impl/rfc2818_verification.ipp:35:44: error: non-member function ‘bool boost::asio::ssl::operator()(bo
ol,boost::asio::ssl::verify_context&)’ cannot have cv-qualifier
  35 |    bool preverified,verify_context& ctx) const
     |                                           ^~~~~
.conan/data/boost/1.75.0/_/_/package/91068d6d6067a809e746602e9538e15eddb14457/include/boost/a
sio/ssl/impl/rfc2818_verification.ipp:34:6: error: ‘bool boost::asio::ssl::operator()(bool,boost::asio::ssl:
:verify_context&)’ must be a nonstatic member function
  34 | bool rfc2818_verification::operator()(
     |     ^~~~~~~~~~~~~~~~~~~~
.conan/data/boost/1.75.0/_/_/package/91068d6d6067a809e746602e9538e15eddb14457/include/boost/a
sio/ssl/impl/rfc2818_verification.ipp:126:6: error: ‘rfc2818_verification’ has not been declared
 126 | bool rfc2818_verification::match_pattern(const char* pattern,|     ^~~~~~~~~~~~~~~~~~~~

我确实发现我在他们使用 gcc 9.3.0 时使用了 gcc 10.2.0,所以我更新了,更改了 conan 配置文件删除了构建文件,在容器上重新安装了 deps 等等,它仍然构建.

如您所见,它在 error: ‘#pragma’ is not allowed文件中出现 boost::asio 错误。我真的不确定问题是什么 github 和本地 docker 使用相同版本的 Ubuntu 构建得很好。 GCC、cmake 和 conan 也是一样的。我真的很困惑。我确实知道有些 deps 使用 glibc,有些使用 newlib,从他告诉我的情况来看,他们似乎确实更新了他们的 conan 配置文件,那里是否有问题?他们的 GCC 安装可能有问题吗?非常感谢任何帮助!

解决方法

出乎意料,可能是您在语法上无法做到这一点的地方包含了一个 boost 标头,例如:

struct X {
    int a,b,c;
    void foo() {
        /* lot's of code
        */

    }


 // OOPS forgot closing }; for the struct
 #include <boost/optional.hpp>

那里的包含会导致这些错误。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。