如何让Ghc以非默认配置调用链接器及更换链接器?
刚好我之前也折腾过GHC的链接器参数配置,这两个问题都有很直接的解决方案,给你详细说下:
向GHC传递链接器参数(对应cc的
-Wl选项) GHC里对应cc -Wl的选项是-optl,你只需要把每个要传给链接器的参数前面加上-optl前缀就行。
比如你用cc时的命令:
cc -Wl,-rpath -Wl,/usr/local/lib
对应到GHC里就是:
ghc -optl-rpath -optl/usr/local/lib
如果链接器参数包含空格或者需要作为一个整体传递,也可以用引号把参数包起来,比如:
ghc -optl'-rpath /usr/local/lib'
这样GHC就会把-rpath /usr/local/lib完整传给链接器,效果和cc的写法一致。
替换GHC默认使用的ld链接器
和cc的-B选项逻辑完全一样,GHC也支持-B参数来指定工具链的搜索目录,这样就能让GHC优先从你指定的目录里找链接器。
如果要把默认的/usr/bin/ld换成/usr/local/bin/ld,直接在GHC命令里加上-B/usr/local/bin就行:
ghc -B/usr/local/bin your-haskell-file.hs
这个选项会让GHC在/usr/local/bin目录下查找包括ld在内的工具链程序,自然就会用/usr/local/bin/ld替代默认的链接器了。
另外还有一种方式是通过-optl直接指定链接器,比如:
ghc -optl-fuse-ld=/usr/local/bin/ld your-haskell-file.hs
不过这种方式是直接给链接器传递-fuse-ld参数,而-B选项更贴近cc的用法,也更通用,推荐优先用-B。
内容的提问来源于stack exchange,提问作者Juan
相关产品推荐
相关产品推荐

