2013-07-11 35 views
10

Tôi có chương trình fortran tôi muốn phân phối, vì vậy tôi muốn liên kết tĩnh trong thư viện gfortran.Cách chính xác để liên kết tĩnh trong thư viện gfortran trên OSX

Nếu tôi biên dịch chương trình với những lá cờ sau:

gfortran -o myprog -static-libgfortran -static-libgcc myprog.f 

otool nói với tôi nó liên kết tĩnh trong hầu hết các thư viện gofrtran, nhưng không libquadmath:

otool -L myprog 

/usr/local/gfortran/lib/libquadmath.0.dylib (compatibility version 1.0.0, current v 
     /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0) 

Có một libquadmath tĩnh thư viện /usr/local/gfortran/lib/libquadmath.a, nhưng mọi dòng liên kết tôi đã thử luôn kết thúc bằng một liên kết tĩnh đầy đủ (không được hỗ trợ trên OSX) hoặc liên kết động tới libquadmath.

Tôi đã quản lý để tạo nội dung tôi muốn bằng cách xóa libquadmath.0.dylib và libquadmath.dylib khỏi/usr/local/gfortran/lib/và sau đó trình liên kết sẽ kéo vào thư viện tĩnh.

Tuy nhiên, điều này có vẻ hơi khó chịu khi nói ít nhất.

Có ai có thể đề xuất một cách thanh lịch hơn để thực hiện việc này không?

Cảm ơn!

Trả lời

0

Tôi biết đây là trình theo dõi rất cũ, nhưng có thể ai đó sẽ vẫn quan tâm đến giải pháp hoạt động.

Hãy nói rằng chúng tôi có mã:

! fort_sample.f90 
program main 
    write (*,*) 'Hello' 
    stop 
end 

Thứ nhất, biên dịch các công cụ:

gfortran -c -o fort_sample.o fort_sample.f90 

Sau đó, liên kết thứ

ld -o ./fort_sample -no_compact_unwind \ 
-arch x86_64 -macosx_version_min 10.12.0 \ 
-lSystem \ 
/usr/local/gfortran/lib/libgfortran.a \ 
/usr/local/gfortran/lib/libquadmath.a \ 
/usr/local/gfortran/lib/gcc/x86_64-apple-darwin16/6.3.0/libgcc.a \ 
fort_sample.o 

Bạn có thể thực hiện nó

./fort_sample 
Hello 

Bạn có thể nhận thấy rằng quadmath không còn ở đó

> otool -L fort_sample 
fort_sample: 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.51.1) 

Tôi đoán đây là những gì bạn đang tìm kiếm ở một nơi đầu tiên. Không xóa các dylib, không có liên kết tượng trưng, ​​v.v.