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

标签 c++ windows node.js

我正在尝试使用两个文件编译 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/

相关文章:

c++ - 模板别名和相关名称

windows - 如何更改 node.js 中的默认目录? ( Windows )

mysql - Windows 批处理文件 - 连接到远程 MySQL 数据库保存结果文本输出

c# - 在 C# 应用程序中使用 Win32 dll(将 char* 返回到 C# 问题)

c++ - 关于 Visio 2007 的简单问题(尝试创建一个简单的 UML 图(C++))?

c++ - 缩放时保持 QGraphicsSimpleTextItem 居中

c++ - MacOSX 上 Google Perftools CPU 分析器中的行号

node.js - 实时重新加载无法与 ember-cli 一起使用

javascript - 如何将 javascript 对象转换为纯文本,以便在发布数据时我可以发布简单文本

python - Node : Using child process in aws lambda to run python script not working