Dpkg
刪除 debuild buildsystem=cmake 連結器標誌
我正在嘗試使用帶有 mingw 交叉編譯器的 cmake 從 debian 創建一個 *.deb 文件。CMake 的編譯器測試在使用
dpkg-buildpackage
.正常建設是好的:
mkdir build && cd build cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_SYSCONFDIR=/etc -DCMAKE_INSTALL_LOCALSTATEDIR=/var -- The C compiler identification is GNU 6.3.0 -- The CXX compiler identification is GNU 6.3.0 -- Check for working C compiler: /etc/alternatives/i686-w64-mingw32-gcc -- Check for working C compiler: /etc/alternatives/i686-w64-mingw32-gcc -- 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: /etc/alternatives/i686-w64-mingw32-g++ -- Check for working CXX compiler: /etc/alternatives/i686-w64-mingw32-g++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Configuring done -- Generating done
但是,當我使用它建構它時
dpkg-buildpackage
,它無法配置:dpkg-buildpackage -uc -us dpkg-buildpackage: info: source package foo dpkg-buildpackage: info: source version 1.0 dpkg-buildpackage: info: source distribution stretch dpkg-buildpackage: info: source changed by $USER dpkg-buildpackage: info: host architecture amd64 dpkg-source --before-build hw fakeroot debian/rules clean dh clean --buildsystem=cmake --parallel dh_testdir -O--buildsystem=cmake -O--parallel dh_auto_clean -O--buildsystem=cmake -O--parallel dh_clean -O--buildsystem=cmake -O--parallel dpkg-source -b hw dpkg-source: info: using source format '3.0 (native)' dpkg-source: info: building sim-honeywell-ease-control in sim-honeywell-ease-control_1.0.tar.xz dpkg-source: info: building sim-honeywell-ease-control in sim-honeywell-ease-control_1.0.dsc debian/rules build make: 'build' is up to date. fakeroot debian/rules binary dh binary --buildsystem=cmake --parallel dh_testdir -O--buildsystem=cmake -O--parallel dh_update_autotools_config -O--buildsystem=cmake -O--parallel dh_auto_configure -O--buildsystem=cmake -O--parallel cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_SYSCONFDIR=/etc -DCMAKE_INSTALL_LOCALSTATEDIR=/var -- The C compiler identification is GNU 6.3.0 -- The CXX compiler identification is GNU 6.3.0 -- Check for working C compiler: /etc/alternatives/i686-w64-mingw32-gcc -- Check for working C compiler: /etc/alternatives/i686-w64-mingw32-gcc -- broken CMake Error at /usr/share/cmake-3.7/Modules/CMakeTestCCompiler.cmake:51 (message): The C compiler "/etc/alternatives/i686-w64-mingw32-gcc" is not able to compile a simple test program.
完整日誌中有趣的部分是連結失敗:
/etc/alternatives/i686-w64-mingw32-gcc -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wl,-z,relro -Wl,--whole-archive CMakeFiles/cmTC_fc912.dir/objects.a -Wl,--no-whole-archive -o cmTC_fc912.exe -Wl,--out-implib,libcmTC_fc912.dll.a -Wl,--major-image-version,0,--minor-image-version,0 @CMakeFiles/cmTC_fc912.dir/linklibs.rsp /usr/bin/i686-w64-mingw32-ld: unrecognized option '-z'
mingw 連結器無法辨識該
-z
選項。當我diff
CMakeCache.txt 時,我可以看到 dpkg-buildpakcage 預設添加了一些連結器標誌:< CMAKE_EXE_LINKER_FLAGS:STRING=-Wl,-z,relro --- > CMAKE_EXE_LINKER_FLAGS:STRING=
我怎樣才能防止
dpkg-buildpackage
這樣做?僅供參考:我的
debian/rules
文件如下所示:#!/usr/bin/make -f %: dh $@ --buildsystem=cmake --parallel
您需要禁用
relro
加固配置;改變你debian/rules
的#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=-relro %: dh $@ --buildsystem=cmake --parallel
(順便說一句,如果您使用的是兼容級別 10 或更高級別,則不需要,
--parallel
因為它預設啟用。在許多情況下,您也可以放棄--buildsystem=cmake
,因為dh
會自動檢測它。)