2014-02-13 68 views
0

我想编译一个非常简单的C++程序。在第一台机器上,编译过程可以正常工作,而且程序运行良好。但是,在第二台Linux机器上,我有一些库没有发现问题。编译过程是这样的:GCC不编译程序

gcc -o WebPageCrawler -lawesomium-1-7 -Wall WebPageCrawler.cc 
/tmp/ccoLVzvo.o: In function `main': 
WebPageCrawler.cc:(.text+0x28): undefined reference to `std::cout' 
WebPageCrawler.cc:(.text+0x2d): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)' 
...even more errors... 

正如你所看到的编译器甚至找不到stdlib之间和其他参考库awesomium(无头浏览器)也无法使用。但是,相应的库都可以在/usr/lib中找到。所以,一定有其他的错误,但我不知道它会是什么。

我的Linux版本是

uname -a 
Linux Ubuntu-1204-precise-64-minimal 3.2.0-39-generic 

我想任何并欣赏帮助。谢谢。

UPDATE: 当使用G ++,我得到:

g++ -o WebPageCrawler -lawesomium-1-7 -Wall WebPageCrawler.cc 
Unable to exec g++.real: No such file or directory 

然而,在另一台机器上我用gcc代替g ++以及它工作正常那里。

UPDATE2: 好吧,现在我能够解决stdlib问题了。我通过进一步安装这样做:

apt-get install build-essential g++ 

然而,现在awesomium库仍然没有找到:

/opt/AwesomiumCrawler # g++ -v -o WebPageCrawler -lawesomium-1-7 -Wall WebPageCrawler.cc 
Using built-in specs. 
COLLECT_GCC=g++.real 
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper 
Target: x86_64-linux-gnu 
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --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.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) 
COLLECT_GCC_OPTIONS='-v' '-o' 'WebPageCrawler' '-Wall' '-shared-libgcc' '-mtune=generic' '-march=x86-64' 
/usr/lib/gcc/x86_64-linux-gnu/4.6/cc1plus -quiet -v -imultilib . -imultiarch x86_64-linux-gnu -D_GNU_SOURCE WebPageCrawler.cc -quiet -dumpbase WebPageCrawler.cc -mtune=generic -march=x86-64 -auxbase WebPageCrawler -Wall -version -fstack-protector -o /tmp/ccGGfqAI.s 
GNU C++ (Ubuntu/Linaro 4.6.3-1ubuntu5) version 4.6.3 (x86_64-linux-gnu) 
    compiled by GNU C version 4.6.3, GMP version 5.0.2, MPFR version 3.1.0-p3, MPC version 0.9 
GGC heuristics: --param ggc-min-expand=98 --param ggc-min-heapsize=127439 
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" 
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../x86_64-linux-gnu/include" 
#include "..." search starts here: 
#include <...> search starts here: 
/usr/include/c++/4.6 
/usr/include/c++/4.6/x86_64-linux-gnu/. 
/usr/include/c++/4.6/backward 
/usr/lib/gcc/x86_64-linux-gnu/4.6/include 
/usr/local/include 
/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed 
/usr/include/x86_64-linux-gnu 
/usr/include 
End of search list. 
GNU C++ (Ubuntu/Linaro 4.6.3-1ubuntu5) version 4.6.3 (x86_64-linux-gnu) 
    compiled by GNU C version 4.6.3, GMP version 5.0.2, MPFR version 3.1.0-p3, MPC version 0.9 
GGC heuristics: --param ggc-min-expand=98 --param ggc-min-heapsize=127439 
Compiler executable checksum: 65b5171ac1bd7b3f07dbea6bdb24be3d 
COLLECT_GCC_OPTIONS='-v' '-o' 'WebPageCrawler' '-Wall' '-shared-libgcc' '-mtune=generic' '-march=x86-64' 
as --64 -o /tmp/cctijQGE.o /tmp/ccGGfqAI.s 
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/ 
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../:/lib/:/usr/lib/ 
COLLECT_GCC_OPTIONS='-v' '-o' 'WebPageCrawler' '-Wall' '-shared-libgcc' '-mtune=generic' '-march=x86-64' 
/usr/lib/gcc/x86_64-linux-gnu/4.6/collect2 --sysroot=/ --build-id --no-add-needed --as-needed --eh-frame-hdr -m elf_x86_64 --hash-style=gnu -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro -o WebPageCrawler /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/4.6 -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../.. -lawesomium-1-7 /tmp/cctijQGE.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/4.6/crtend.o /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crtn.o 
/tmp/cctijQGE.o: In function `main': 
WebPageCrawler.cc:(.text+0x8d): undefined reference to `Awesomium::WebConfig::WebConfig()' 
WebPageCrawler.cc:(.text+0xc7): undefined reference to `Awesomium::WebString::operator=(Awesomium::WebString const&)' 
WebPageCrawler.cc:(.text+0xd6): undefined reference to `Awesomium::WebString::~WebString()' 
WebPageCrawler.cc:(.text+0xe5): undefined reference to `Awesomium::WebCore::Initialize(Awesomium::WebConfig const&)' 
WebPageCrawler.cc:(.text+0x140): undefined reference to `Awesomium::WebURL::WebURL(Awesomium::WebString const&)' 
WebPageCrawler.cc:(.text+0x14c): undefined reference to `Awesomium::WebString::~WebString()' 
WebPageCrawler.cc:(.text+0x1ed): undefined reference to `Awesomium::WebString::CreateFromUTF8(char const*, unsigned int)' 
WebPageCrawler.cc:(.text+0x203): undefined reference to `Awesomium::WebString::CreateFromUTF8(char const*, unsigned int)' 
WebPageCrawler.cc:(.text+0x23c): undefined reference to `Awesomium::JSValue::ToString() const' 
WebPageCrawler.cc:(.text+0x259): undefined reference to `Awesomium::WebString::~WebString()' 
WebPageCrawler.cc:(.text+0x27b): undefined reference to `Awesomium::WebCore::Shutdown()' 
WebPageCrawler.cc:(.text+0x28c): undefined reference to `Awesomium::JSValue::~JSValue()' 
WebPageCrawler.cc:(.text+0x298): undefined reference to `Awesomium::WebString::~WebString()' 
WebPageCrawler.cc:(.text+0x2a4): undefined reference to `Awesomium::WebString::~WebString()' 
WebPageCrawler.cc:(.text+0x2b0): undefined reference to `Awesomium::WebURL::~WebURL()' 
WebPageCrawler.cc:(.text+0x2dd): undefined reference to `Awesomium::WebString::~WebString()' 
WebPageCrawler.cc:(.text+0x2ee): undefined reference to `Awesomium::WebString::~WebString()' 
WebPageCrawler.cc:(.text+0x2ff): undefined reference to `Awesomium::WebString::~WebString()' 
WebPageCrawler.cc:(.text+0x310): undefined reference to `Awesomium::JSValue::~JSValue()' 
WebPageCrawler.cc:(.text+0x321): undefined reference to `Awesomium::WebString::~WebString()' 
WebPageCrawler.cc:(.text+0x332): undefined reference to `Awesomium::WebString::~WebString()' 
WebPageCrawler.cc:(.text+0x343): undefined reference to `Awesomium::WebURL::~WebURL()' 
/tmp/cctijQGE.o: In function `Update(int)': 
WebPageCrawler.cc:(.text+0x372): undefined reference to `Awesomium::WebCore::instance()' 
/tmp/cctijQGE.o: In function `Awesomium::ToString(Awesomium::WebString const&)': 
WebPageCrawler.cc:(.text._ZN9Awesomium8ToStringERKNS_9WebStringE[Awesomium::ToString(Awesomium::WebString const&)]+0x25): undefined reference to `Awesomium::WebString::IsEmpty() const' 
WebPageCrawler.cc:(.text._ZN9Awesomium8ToStringERKNS_9WebStringE[Awesomium::ToString(Awesomium::WebString const&)]+0x4d): undefined reference to `Awesomium::WebString::ToUTF8(char*, unsigned int) const' 
WebPageCrawler.cc:(.text._ZN9Awesomium8ToStringERKNS_9WebStringE[Awesomium::ToString(Awesomium::WebString const&)]+0x75): undefined reference to `Awesomium::WebString::ToUTF8(char*, unsigned int) const' 
/tmp/cctijQGE.o: In function `Awesomium::WSLit(char const*)': 
WebPageCrawler.cc:(.text._ZN9Awesomium5WSLitEPKc[Awesomium::WSLit(char const*)]+0x2d): undefined reference to `Awesomium::WebString::CreateFromUTF8(char const*, unsigned int)' 
/tmp/cctijQGE.o: In function `Awesomium::WebConfig::~WebConfig()': 
WebPageCrawler.cc:(.text._ZN9Awesomium9WebConfigD2Ev[_ZN9Awesomium9WebConfigD5Ev]+0x19): undefined reference to `Awesomium::WebStringArray::~WebStringArray()' 
WebPageCrawler.cc:(.text._ZN9Awesomium9WebConfigD2Ev[_ZN9Awesomium9WebConfigD5Ev]+0x29): undefined reference to `Awesomium::WebString::~WebString()' 
WebPageCrawler.cc:(.text._ZN9Awesomium9WebConfigD2Ev[_ZN9Awesomium9WebConfigD5Ev]+0x39): undefined reference to `Awesomium::WebString::~WebString()' 
WebPageCrawler.cc:(.text._ZN9Awesomium9WebConfigD2Ev[_ZN9Awesomium9WebConfigD5Ev]+0x49): undefined reference to `Awesomium::WebString::~WebString()' 
WebPageCrawler.cc:(.text._ZN9Awesomium9WebConfigD2Ev[_ZN9Awesomium9WebConfigD5Ev]+0x59): undefined reference to `Awesomium::WebString::~WebString()' 
WebPageCrawler.cc:(.text._ZN9Awesomium9WebConfigD2Ev[_ZN9Awesomium9WebConfigD5Ev]+0x69): undefined reference to `Awesomium::WebString::~WebString()' 
/tmp/cctijQGE.o:WebPageCrawler.cc:(.text._ZN9Awesomium9WebConfigD2Ev[_ZN9Awesomium9WebConfigD5Ev]+0x79): more undefined references to `Awesomium::WebString::~WebString()' follow 
collect2: ld returned 1 exit status 

前面已经提到的库位于

/usr/lib # ls -l *awe* 
-rwxr-xr-x 1 root root  8032 Feb 12 18:49 awesomium_process 
lrwxrwxrwx 1 root root  21 Feb 12 18:49 libawesomium-1-7.so -> libawesomium-1-7.so.2 
lrwxrwxrwx 1 root root  23 Feb 12 18:49 libawesomium-1-7.so.2 -> libawesomium-1-7.so.2.0 
-rwxr-xr-x 1 root root 63475481 Feb 12 18:49 libawesomium-1-7.so.2.0 

回答

4

的命令编译C++代码是g++,而不是gcc

它们都是同一个集合的一部分,但g++命令添加了一些额外选项;特别是它隐含地链接了C++标准库。

-c编译,生成只是一个目标文件,而不是调用链接,它可能并不重要 - 但你生成可执行文件,这意味着连接器需要了解对C的依赖性++标准库。

更新:现在,您已更新问题:您可能需要安装g++(在您的系统上,apt-get install build-essential g++)。

现在你有一个不同的问题:g++找不到“awesomium”库。这些库位于/usr/lib,因此您不需要指定-L选项。问题是-l选项需要关注依赖它的文件。

链接器按顺序处理它的命令行参数,跟踪哪些符号仍然需要解析并解决稍后处理的对象或库中的任何未解决的符号。

因此,而不是:

g++ -o WebPageCrawler -lawesomium-1-7 -Wall WebPageCrawler.cc 

尝试:

g++ -Wall WebPageCrawler.cc -lawesomium-1-7 -o WebPageCrawler 

具体顺序不是强制性的,但它应该工作。

+0

Thx。我更新了我的问题。 – toom

+0

为什么downvote? –

+0

是的,就是这样。非常感谢你的帮助! :) – toom