【问题标题】:Using mkmf with Ruby ext Linking a Static Library with -L and -I and -l将 mkmf 与 Ruby ext 一起使用 使用 -L 和 -I 和 -l 链接静态库
【发布时间】:2019-11-15 05:04:27
【问题描述】:

给定一个简单的gcc 命令,如下所示:

gcc quickrb.c -o main -L /usr/local/lib/quickjs -I /usr/local/lib/quickjs -l quickjs

我正在尝试使用 mkmf 将其包装在 ruby​​ gem 扩展 extconf.rb 中。目前我有:

require 'mkmf'

dir_config('quickjs', '/usr/local/lib/quickjs', '/usr/local/include/quickjs')

abort('missing "quickjs.h"') unless find_header('quickjs/quickjs.h')
abort('missing JS_NewRuntime') unless find_library('quickjs', 'JS_NewRuntime', 'quickjs/quickjs.h')
abort('missing JS_NewContext') unless find_library('quickjs', 'JS_NewContext', 'quickjs/quickjs.h')

create_makefile('quickrb/quickrb')

这失败了:

checking for quickjs/quickjs.h... yes
checking for JS_NewRuntime() in -lquickjs... no
missing JS_NewRuntime

我不确定如何处理。如果没有 find_library 调用 Makefile 会生成,但是编译时会失败:

dyld: Symbol not found: _JS_NewRuntime

注意

这是我的示例quickrb.c 文件:

#include <quickjs/quickjs.h>

#include <ruby.h>

#include <stdio.h>
#include <strings.h>

void Init_quickrb()
{
  const char *filename = "runtime";
  const char *script = "3 + 4";
  const size_t length = strlen(script);

  JSRuntime *runtime = JS_NewRuntime();
  JSContext *context = JS_NewContext(runtime);

  JSValue value = JS_Eval(context, script, length, filename, JS_EVAL_TYPE_GLOBAL);

  const char *result = JS_ToCString(context, value);
  printf("%s = %s\n", script, result);
  JS_FreeCString(context, result);

  JS_FreeContext(context);
  JS_FreeRuntime(runtime);
}

【问题讨论】:

    标签: c ruby extconf.rb mkmf


    【解决方案1】:

    我想你想要的是:

    find_library('quickjs', 'JS_NewRuntime', '/usr/local/lib/quickjs')
    

    因为the documentation 说:

    find_library(lib, func, *paths, &b) public

    返回入口点 func 是否可以在库 lib 在指定的路径之一中找到,其中 paths 是字符串数组。如果 func 为 nil ,则 main() 函数用作入口点。

    如果找到 lib,则将找到它的路径添加到搜索和链接的库路径列表中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-08
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 2017-01-07
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多