2013-07-28 215 views
4

我想构建一个只有静态引用到libgfortran(最好是libgcc)的库。静态-libgfortran在库构建

不过,如果我使用连接标志

-static -lgfortran -static-libgfortran -static-libgcc 

在OS X上我得到

ld: library not found for -lcrt0.o 
collect2: error: ld returned 1 exit status 

,如果我尝试使用

-shared -lgfortran -static-libgfortran 

我得到

Undefined symbols for architecture x86_64: 
    "_quadmath_snprintf", referenced from: 
     _write_float in libgfortran.a(write.o) 
    "_strtoflt128", referenced from: 
     __gfortrani_convert_real in libgfortran.a(read.o) 
     __gfortrani_convert_infnan in libgfortran.a(read.o) 

如果我使用-dynamiclib -lgfortran,一切都编译正常(但有一个到libgfortran和libgcc的动态链接)。

这样看来,gcc is not build statically在OS X

如何建立自己的图书馆,使最终用户不需要安装gfortran或GCC?

我使用的是gcc的macports版本,但我准备使用gfortran/gcc的另一个分发者,如果它允许我这样做的话。

回答

5
-dynamiclib -lgfortran -static-libgfortran \ 
    /opt/local/lib/gcc47/libquadmath.a -static-libgcc 

似乎要做的伎俩!

奇怪的是,我发现我需要添加一个完整的路径到libquadmath.a,这感觉就像一个老实说的gcc/gfortran的错误。

+0

如果这解决了你的问题,你可以接受你自己的答案。 – Yossarian

+0

不是两天 – fommil