这个问题是针对代码达人提出的,而我并不是。。。我正在尝试构建一组名为 ladosc 的老式 ladspa 插件(你可以在google 代码),但存在一些我找不到解决方法的错误。
Makefile:
DESTINATION_DIR=~/.ladspa
LIBLO_STATIC=/usr/lib/liblo.a
install: install_op install_osc
install_op: op.so
mkdir -p ${DESTINATION_DIR}
cp op.so ${DESTINATION_DIR}/.ladspa
op.so: operator.o
ld operator.o -o op.so -shared
operator.o: operator.c
gcc -c operator.c
install_osc: osc.so
mkdir -p ${DESTINATION_DIR}
cp osc.so ${DESTINATION_DIR}/.ladspa
osc.so: osc.o ${LIBLO_STATIC}
ld osc.o ${LIBLO_STATIC} -o osc.so -shared
osc.o: lad-osc.c
gcc -c -g lad-osc.c -o osc.o
clean:
rm *.o *~ *.so
没有配置脚本,当我制作时,链接器抛出以下错误:
ld: operator.o: relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC
operator.o: could not read symbols: Bad value
当我在 makefile 中的 gcc 调用中添加 -fPIC 标志时,构建运行方式有所不同,并且链接器出现以下错误:
ld osc.o /usr/lib/liblo.a -o osc.so -shared
ld: /usr/lib/liblo.a(liblo_la-address.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/usr/lib/liblo.a: could not read symbols: Bad value
我不明白这一点。这是否意味着我必须重新编译 liblo?它是直接从 Ubunut 存储库中获取的。
大约 3 年前,其他人已经在 google code 的项目页面上提出了这些问题,但开发人员没有做出反应。
我已经搜索了解释并发现了很多有关位置独立代码以及 32 位和 64 位之间差异的内容,但我了解得还不够多,无法找到解决我的问题的方法。
有人能帮助我启动并运行这些插件吗?
欢呼吧,托马斯
答案1
我联系了开发人员,他帮助我编译了它。
我必须在 makefile 中用 (.so 是一个共享库而 .a 不是) 替换并使用liblo.a
gcc的标志进行编译。liblo.so
-fPIC
现在插件已经编译完毕。目前还不能测试它们的功能,但它们可以在 Ardour 中正常打开。