【发布时间】:2018-06-17 14:44:26
【问题描述】:
所以我对 GitLab CI 有这种奇怪的行为。我得到了它的工作,但现在我想知道它为什么工作。
首先,我从 GitLab CI 开始。我在我的机器(Arch Linux)上安装了一个带有 docker 的本地运行程序,这样我就可以在不推动和等待的情况下进行测试。我用 googletest 框架编写了一个测试(只是断言为真)。我在本地触发了脚本,一切正常。所有测试都在本地 docker 镜像中通过。
所以现在,当一切正常时,我推送到存储库,然后一个跑步者接手了这项工作。这在 Ubuntu 16.04 上运行。现在它编译并在执行后引发了分段错误。
我开始在 Ubuntu 系统上调试,过了一会儿我切换了两个库的链接顺序:
发件人:
target_link_libraries(${PROJECT_NAME}_test PRIVATE Threads::Threads -lglog -lpthread
${QT_LIBRARIES}
${PROJECT_BINARY_DIR}/googletest-build/googlemock/libgmock.a
${PROJECT_BINARY_DIR}/googletest-build/googlemock/gtest/libgtest.a
${OpenCV_LIBRARIES}
)
收件人:
target_link_libraries(${PROJECT_NAME}_test PRIVATE Threads::Threads -lglog -lpthread
${QT_LIBRARIES}
${OpenCV_LIBRARIES}
${PROJECT_BINARY_DIR}/googletest-build/googlemock/libgmock.a
${PROJECT_BINARY_DIR}/googletest-build/googlemock/gtest/libgtest.a
)
我正在使用 CMake 进行构建。
两台电脑都运行相同版本的 docker (17.12.0-ce)。
使用的gcc docker镜像是:sha256:95d81930694ca9e705b71dc141ddd13f466f4989857f74aebaf1d29ba6553775
显然这个问题是相关的: Why does the order in which libraries are linked sometimes cause errors in GCC?
现在我的问题是:当两个系统都运行一个 docker 容器时。为什么在这种情况下更改链接顺序可以解决问题?
【问题讨论】:
标签: c++ docker cmake ld gitlab-ci-runner