C++ 使用dpkg buildpackage(或Debild)时链接错误
我正试图为一个旧项目构建一个Debian包,但我遇到了一个非常奇怪的错误 当通过C++ 使用dpkg buildpackage(或Debild)时链接错误,c++,gcc,makefile,ld,dpkg,C++,Gcc,Makefile,Ld,Dpkg,我正试图为一个旧项目构建一个Debian包,但我遇到了一个非常奇怪的错误 当通过make命令使用给定的Makefile时,程序会自动生成,不会出错。但是,当我使用dpkg buildpackage-us-uc或debaild-us-uc构建包时,我会多次遇到此错误(在不同的文件上): 它表示未找到main,但在使用make构建时,不会出现此问题。请注意,它在两天前工作得非常好,但昨天停止了工作 下面是gcc-v的输出: Using built-in specs. COLLECT_GCC=gcc
make
命令使用给定的Makefile时,程序会自动生成,不会出错。但是,当我使用dpkg buildpackage-us-uc
或debaild-us-uc
构建包时,我会多次遇到此错误(在不同的文件上):
它表示未找到main,但在使用make
构建时,不会出现此问题。请注意,它在两天前工作得非常好,但昨天停止了工作
下面是gcc-v的输出:
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.2-19ubuntu1'
--with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs
--enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr
--program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib
--without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8
--libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu
--enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object
--disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin
--enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre
--enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64
--with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64
--with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar
--enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686
--with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic
--enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu
--target=x86_64-linux-gnu
Thread model: posix
gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)
我没有发布任何代码,因为它很长(甚至是Makefile),而且问题不应该出现在那里,因为它在使用
make
时起作用。我终于发现了问题:debuild
和dpkg buildpackage
将环境变量CFLAGS
初始化为某个值,我的Makefile使用-e
选项调用其他Makefile。这些makefile正在使用-c…
选项初始化CFLAGS
,但是make
的-e
选项通过环境中已经定义的变量覆盖局部变量。因此,CFLAGS
有一个没有-c
选项的值,并构建了一个二进制文件而不是一个对象文件。这就是为什么ld
在程序中找不到main
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.2-19ubuntu1'
--with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs
--enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr
--program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib
--without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8
--libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu
--enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object
--disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin
--enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre
--enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64
--with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64
--with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar
--enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686
--with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic
--enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu
--target=x86_64-linux-gnu
Thread model: posix
gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)