我正试着和libcsv一起工作。头文件csv.h位于/usr/include目录中,共享库文件libcsv.so位于/usr/lib64 (Fedora 35)中。
目前,我已经能够使用shell命令使gem文件正常工作:
gcc -c -fPIC rcsv.c -o rcsv.o
gcc -shared -lcsv rcsv.o -o rcsv.so我必须手动将.so文件移动到lib/rcsv/,这非常不方便,并且不利于安装gems。
我想在extconf.rb中用Ruby格式编写同样的代码。我该怎么做?
extconf.rb
require 'mkmf'
have_header("csv.h")
have_library('libcsv.so')
create_makefile('rcsv/rcsv')rake日志
(in /home/<username>/Desktop/rcsv)
mkdir -p tmp/x86_64-linux/rcsv/3.0.3
cd tmp/x86_64-linux/rcsv/3.0.3
/home/<username>/.asdf/installs/ruby/3.0.3/bin/ruby -I. -r.rake-compiler-siteconf.rb ../../../../ext/rcsv/extconf.rb
checking for csv.h... yes
checking for -llibcsv.so... no
creating Makefile
cd -
cd tmp/x86_64-linux/rcsv/3.0.3
/usr/bin/gmake
compiling ../../../../ext/rcsv/rcsv.c
linking shared-object rcsv/rcsv.so
cd -
mkdir -p tmp/x86_64-linux/stage/lib/rcsv
/usr/bin/gmake install target_prefix=
/usr/bin/install -c -m 0755 rcsv.so /home/<username>/Desktop/rcsv/lib/rcsv
cp tmp/x86_64-linux/rcsv/3.0.3/rcsv.so tmp/x86_64-linux/stage/lib/rcsv/rcsv.so
Loaded suite /home/<username>/.asdf/installs/ruby/3.0.3/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/rake_test_loader
Started
/home/<username>/.asdf/installs/ruby/3.0.3/bin/ruby: symbol lookup error: /home/<username>/Desktop/rcsv/lib/rcsv/rcsv.so: undefined symbol: csv_init
rake aborted!
Command failed with status (127)
Tasks: TOP => default => test
(See full trace by running task with --trace)发布于 2022-03-20 09:06:13
extconf.rb中的上述代码是正确的,但不是have_library('libcsv.so')中的字符串值,它应该是'csv'而不是'libcsv.so'。
因此,总的来说,extconf.rb文件应该如下所示:
require 'mkmf'
have_header("csv.h")
have_library('csv')
create_makefile('rcsv/rcsv')https://stackoverflow.com/questions/71544596
复制相似问题