繁体   English   中英

在简单的 c++ 程序中链接到 node.js

[英]Link against node.js in simple c++ program

We are trying to use node.js in a C++ project and thus cloned the nodejs/node repository, that is linked from the Node.js documentation (chapter C++ embedder API ).

我们通过运行成功构建nodejs

./configure
make -j4

然后我们创建了一个简单的CMakeLists.txt

cmake_minimum_required(VERSION 3.23)

project(v8-cpp)
set(CMAKE_CXX_STANDARD 20)

set(NODE_DIR ${CMAKE_SOURCE_DIR}/node)

set(HEADERS

)

set(SOURCES

)

set(INCLUDE_DIRS
 ${NODE_DIR}/deps/v8/include/
 ${NODE_DIR}/deps/uv/include/

 ${NODE_DIR}/src/
)

add_executable(${PROJECT_NAME}
 main.cpp
 ${HEADERS}
 ${SOURCES}
)

target_link_libraries(${PROJECT_NAME}    
 ${NODE_DIR}/out/Release/libzlib.a
 ${NODE_DIR}/out/Release/libbase64_neon64.a
 ${NODE_DIR}/out/Release/libbase64.a
 ${NODE_DIR}/out/Release/libbrotli.a
 ${NODE_DIR}/out/Release/libcares.a
 ${NODE_DIR}/out/Release/libgtest_main.a
 ${NODE_DIR}/out/Release/libgtest.a
 ${NODE_DIR}/out/Release/libhistogram.a
 ${NODE_DIR}/out/Release/libicudata.a
 ${NODE_DIR}/out/Release/libicui18n.a
 ${NODE_DIR}/out/Release/libicutools.a
 ${NODE_DIR}/out/Release/libicuucx.a
 ${NODE_DIR}/out/Release/libllhttp.a
 ${NODE_DIR}/out/Release/libnghttp2.a
 ${NODE_DIR}/out/Release/libnghttp3.a
 ${NODE_DIR}/out/Release/libngtcp2.a
 ${NODE_DIR}/out/Release/libnode.a
 ${NODE_DIR}/out/Release/libopenssl.a
 ${NODE_DIR}/out/Release/libtorque_base.a
 ${NODE_DIR}/out/Release/libuv.a
 ${NODE_DIR}/out/Release/libuvwasi.a
 ${NODE_DIR}/out/Release/libv8_base_without_compiler.a
 ${NODE_DIR}/out/Release/libv8_compiler.a
 ${NODE_DIR}/out/Release/libv8_init.a
 ${NODE_DIR}/out/Release/libv8_initializers.a
 ${NODE_DIR}/out/Release/libv8_libbase.a
 ${NODE_DIR}/out/Release/libv8_libplatform.a
 ${NODE_DIR}/out/Release/libv8_snapshot.a
 ${NODE_DIR}/out/Release/libv8_zlib.a
)

target_include_directories(${PROJECT_NAME} PUBLIC
 ${INCLUDE_DIRS}
)

我们的main.cpp正是文档中的示例嵌入应用程序

编译产生一个 linker 错误,内容如下:

Undefined symbols for architecture arm64:
"node::SnapshotBuilder::GetEmbeddedSnapshotData()", referenced from:
node::GenerateAndWriteSnapshotData(node::SnapshotData const*, node::InitializationResult const) in libnode.a(node.o)
node::LoadSnapshotDataAndRun(node::SnapshotData const*, node::InitializationResult const) in libnode.a(node.o)
node::worker::Worker::New(v8::FunctionCallbackInfo<v8::Value> const&) in libnode.a(node_worker.o)
node::contextify::ContextifyContext::ContextifyContext(node::Environment*, v8::Local<v8::Object>, node::contextify::ContextOptions const&) in libnode.a(node_contextify.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)


Undefined symbol: node::SnapshotBuilder::GetEmbeddedSnapshotData()

我们不明白如何解决该错误,也找不到任何提示。 是否与NODE_WANT_INTERNALS未定义有关,这会导致SnapshotBuilder class 丢失(在node_snapshot_builder.h中定义)?

您可能希望在没有 Node.js 自己的快照的情况下构建 Node.js。 通过--without-node-snapshotconfigure

./configure --without-node-snapshot
make -j4

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM