OCaml动态链接和-nodynlink编译标志
根据报告:OCaml动态链接和-nodynlink编译标志,ocaml,dynamic-linking,Ocaml,Dynamic Linking,根据报告: -nodynlink允许编译器使用一些仅对从未动态链接的代码有效的优化。 … -shared[…]在某些系统(目前只有Linux AMD 64)下,插件中链接的所有OCaml代码必须在编译时没有-nodynlink标志。[……] 对我来说,这意味着: “请勿使用-nodynlink编译标志”限制仅适用于插件 非插件部分(正在扩展的应用程序)可以使用-nodynlink进行编译 因此,我的实际问题有两个: 我的上述解释正确吗 当我故意违反上述限制时,编译器/loader/etc没有
-nodynlink
允许编译器使用一些仅对从未动态链接的代码有效的优化。…
-shared
[…]在某些系统(目前只有Linux AMD 64)下,插件中链接的所有OCaml代码必须在编译时没有-nodynlink
标志。[……]
对我来说,这意味着:
- “请勿使用
编译标志”限制仅适用于插件-nodynlink
- 非插件部分(正在扩展的应用程序)可以使用
进行编译-nodynlink
提前谢谢你 第一点是正确的。但是,许多现代操作系统默认使用PIE可执行文件,这与
-nodynlink
选项不兼容
关于第二点,在第二个位置指定-shared
将删除-nodynlink
标志,这可能解释您没有收到任何错误的原因。否则,对于非空插件,链接器应生成重新定位错误。通常试图编译
let printer()=Format.printf“我是一个plugin@."
let()=Lib.register:=打印机:!库寄存器
与
给我
# ocamlopt -shared -nodynlink plugin.ml -o plugin.cmxs
/usr/bin/ld: plugin.o: warning: relocation against `camlPlugin__Pfield_51' in >read-only section `.text'
/usr/bin/ld: plugin.o: relocation R_X86_64_PC32 against symbol >`camlPlugin__const_block_11' can not be used when making a shared object; >recompile with -fPIC
/usr/bin/ld: final link failed: bad value