gpt4 book ai didi

c++ - 我如何制作一个 'wscript' 文件,该文件使用一组 cxxflags 编译一个 c 文件,并使用另一组 cxxflags 编译一个 cpp

转载 作者:可可西里 更新时间:2023-11-01 09:31:24 27 4
gpt4 key购买 nike

我正在尝试使用两个文件编译 NodeJS native 模块:1 个 .c 文件和 1 个 .cpp 文件。这是我的“wscript”文件的样子:

def set_options(opt):
opt.tool_options("compiler_cxx")

def configure(conf):
conf.check_tool("compiler_cxx")
conf.check_tool("node_addon")

def build(bld):
obj = bld.new_task_gen("cxx")
obj.cxxflags = ["-g", "-D_FILE_OFFSET_BITS=64", "-D_LARGEFILE_SOURCE", "-Wall", "-x", "objective-c"]
obj.source = "c-file.c"
obj = bld.new_task_gen("cxx", "shlib", "node_addon")
obj.cxxflags = ["-g", "-D_FILE_OFFSET_BITS=64", "-D_LARGEFILE_SOURCE", "-Wall"]
obj.target = "binding"
obj.source = "cpp-file.cc"

这为我构建了一个 binding.node 文件,然后我可以在 Node 中部分使用它,但是只要我调用位于 C 文件中的函数(首先在 wscript 中编译的函数)上面),Node 崩溃时出现类似以下内容:

dyld: lazy symbol binding failed: Symbol not found: __Z9getSomethingv
Referenced from: /Users/nrajlich/test/build/default/binding.node
Expected in: flat namespace

这让我相信第一个文件没有被包含在链接阶段,但我只是不确定我应该如何添加它。有任何想法吗?提前致谢!

最佳答案

我认为 waf 无法实现我最初尝试做的事情。

在这种情况下,我试图将 C++ 和 Obj-C 代码一起编译并一起使用。最初我在 .c 文件中有 Obj-C 代码,在 .cc 文件中有 C++ 代码,并试图为不同的文件类型传递不同的标志。

从那时起,我了解到 Obj-C 和 C++ 可以合并在同一个文件中!我只需要向 g++ 添加一个 -ObjC++ 标志。这在 waf 中很容易完成,并且还允许将所有需要的东西合并到一个文件中。从那里一切都很好。

所以我能够解决我最初想做的事情,但是我不相信我问的原始问题可以用 waf 来解决。干杯!

关于c++ - 我如何制作一个 'wscript' 文件,该文件使用一组 cxxflags 编译一个 c 文件,并使用另一组 cxxflags 编译一个 cpp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5618406/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com