链接V8时未定义的引用

时间:2013-02-25 16:19:40

标签: c++ linker g++ linker-errors v8

我很想用V8编译一个非常小的例子。

cpp程序是这样的:

#include "v8.h"

int main()
{
     v8::HandleScope handle_scope;

     return 0;
}

编译行:g ++ -I / home / lterje / git / tengine / Externals / v8 / include /home/lterje/git/tengine/Externals/v8/out/ia32.release/obj.target/tools/gyp/ libv8_snapshot.a test.cpp -o test -lpthread

我得到的错误:

/tmp/ccHYtJuE.o: In function `main':
test.cpp:(.text+0x11): undefined reference to `v8::HandleScope::HandleScope()'
test.cpp:(.text+0x22): undefined reference to `v8::HandleScope::~HandleScope()'
collect2: error: ld returned 1 exit status

基本库,快照库和无快照库文件之间究竟有什么区别?我尝试过连接它们,但它们都不起作用:/

2 个答案:

答案 0 :(得分:2)

首先,我不得不为我糟糕的英语道歉。 我刚刚将.a文件链接到我自己的项目。 由于没有给出libv8_snapshot.a的依赖性,因此出现ld错误。

这是我的编译声明:

g ++ -o xxxxx -I~v8 / out / native / obj.target / tools / gyp / libv8_ {base.native,snapshot} .a~v8 / out / native / obj.target / third_party / icu / libicu {data,i18n,snapshot} .a~v8 / out / native / obj.target / icudata / third_party / icu / linux / icudt46_dat.o -lrt -lpthread

我认为libv8_base.native.a libv8_snapshot.a依赖于icu和icudt46文件,而且有关unix clock_time的一些函数依赖于“rt”,所以添加“-lrt”

希望对大家有所帮助〜 作为一个中国人,对不起我的英语。

答案 1 :(得分:0)

  

编译行:
  g ++ -I / home / lterje / git / tengine / Externals / v8 / include /home/lterje/git/tengine/Externals/v8/out/ia32.release/obj.target/tools/gyp/libv8_snapshot.a test.cpp -o test -lpthread

此链接行不正确。试试这个:

g++ -I/home/lterje/git/tengine/Externals/v8/include \
  test.cpp -o test \
  /home/.../obj.target/tools/gyp/libv8_snapshot.a \
  -lpthread

阅读this以了解订单的重要性。