gpt4 book ai didi

c - mkmf 在编译 C 扩展时忽略子文件夹中的文件

转载 作者:数据小太阳 更新时间:2023-10-29 07:13:03 24 4
gpt4 key购买 nike

我想这样组织 C 源代码:

+ /
|
|___ + ext
| |
| |___ + native_extension
| |
| |___ + lib
| | |
| | |___ (Source files are kept in here - may contain sub-folders)
| |
| |___ native_extension.c
| |___ native_extension.h
| |___ extconf.rb
|
|___ + lib
| |
| |___ (Ruby source code)
|
|___ Rakefile

我无法使此设置与 mkmf 一起正常工作。 native_extension/lib 中的文件(包含在 native_extension.c 中)将被完全忽略。

当我构建扩展时,只有 native_extension.{h,c} 被编译,我得到一个不完整的 native_extension.{so,dll} 给我符号当我尝试运行它时出现查找错误。

有什么方法可以让它工作吗?

最佳答案

您可以像这样使用带有“extconf.rb”的其他文件夹中的源文件:

require 'mkmf'

extension_name = 'native_extension'
dir_config(extension_name)

# enum all source files
$srcs = ["native_extension.c", "lib/file.c"]

# add include path to the internal folder
# $(srcdir) is a root folder, where "extconf.rb" is stored
$INCFLAGS << " -I$(srcdir)/lib"

# add folder, where compiler can search source files
$VPATH << "$(srcdir)/lib"

create_makefile(extension_name)

关于c - mkmf 在编译 C 扩展时忽略子文件夹中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7698192/

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