이전 포스팅에서는 F77_ZMQ의 설치에 대해서 다루었다.
https://minosauce.tistory.com/8
[zeroMQ] F77_ZMQ 설치 (5)
이전 포스트에서 zeroMQ를 이미 설치했다는 가정하에 다음을 진행한다. https://minosauce.tistory.com/5 [zeroMQ] zeroMQ 설치 Fortran 으로 프로그래밍된 유동해석 툴에서 데이터를 추출한 후, 추출한 데이터를
minosauce.tistory.com
설치를 완료한 후, Fortran 파일과 F77_ZMQ를 Linking 해주어야 한다.
현재 가정하는 상황은 Fortran 과 Python 사이의 소켓 통신을 원하는 것이고
Python이 Server, Fortran이 Client 이다. 물론 이 반대도 가능하다.
그리고 Fortran의 파일명은 'Mytest.f90' 이라고 가정하자.
Mytest.f90 과 F77_ZMQ를 Linking 시켜주는 방법은 2가지가 있다.
첫 번째는 gfortran을 이용하여 Mytest.f90과 'libzmq.so' 그리고 'libf77zmq.so' 을 Linking 해주는 방법과
두 번째는 CMake를 이용하여 CMakeList.txt 파일을 작성하여 위 세 파일을 Linking 해주는 방법이 있다.
gfortran 방법과 CMake 방법 둘다 포스팅할 예정이다.
사용자가 편한 방법으로 아무거나 쓰기를 권한다.
우선 이번 포스트에서는 gfortran을 이용한 Linking에 대해서만 다룬다.
gfortran 을 이용한 Linking 방법도 두 가지로 나누어진다.
설치 난이도가 첫 번째는 간단하고 두 번째는 복잡하다.
Linking 전 확인사항!
1. f77_zmq.h (fortran 77버젼) 또는 f77_zmq_free.h (fortran 90버젼)파일을 open하여 안에 내용이 있는지 확인한다.
2. 헤더 파일을 open 하였을 때 텅빈 문서가 나온다면 F77_ZMQ 설치 포스팅의
"modify 152th line, open(sys.argv[1], 'r' ) → open('f77_zmq.c', 'r' ) and save"가 실행이 안되었다는 것이니 다시 한번 확인하길 바란다.
F77_ZMQ gfortran Linking 1 Code
# 간단 Linking
gfortran -o Mytest Mytest.f90 -lzmq -lf77zmq
or
gfortran -shared -o Mytest Mytest.f90 -lzmq -lf77zmq
or
gfortran -G -lzmq -lf77zmq -o Mytest Mytest.f90
나는 정적라이브러리 보다는 동적라이브러리(공유 라이브러리) 로 만들기 원해서
-shared 옵션이나 -G 옵션을 사용하였다. (사실 -G는 아직 안해봤다, 가능은 할 듯)
정적라이브러리로 만들고 싶은 사람은 -static 옵션을 사용해서 상황에 맞게 잘 사용하자.
위 코드 중 -lzmq 는 zmq의 lib파일을, -lf77zmq는 f77zmq의 lib 파일을 지칭하는 것인데,
-lzmq가 어느 시점에서 설치되는 것인지는 아직 불명확하다.
libzmq을 설치할 때 -lzmq도 설치 되는 것으로 추정하고 있지만, 정확한 것은 아니다.
F77_ZMQ gfortran Linking 2
F77_ZMQ git을 보면 -lf77zmq 대신 libf77zmq.a를 사용하는 방법이 있다.
두 번째 복잡한 방법은 이 libf77zmq.a를 생성하는 방법에 대한 것이다.
결론부터 말하자면 첫 번째나 두 번째나 결과는 같아서 두 번째는 의미가 없다.
하지만 사람은 호기심의 동물이 아닌가. 이런 나도 호기심에 두 번째 방법까지 해보았다.
굳이 호기심이 아니여도 libf77zmq.a 파일 또는 libf77zmq.so 파일이 필요한 사람이 있을 수도 있다.
필요한 사람은 아래 방법을 따라하면 좋다.
libf77zmq.so는 libtool을 이용하여 libf77zmq.la 파일을 .so 파일로 변환시켜주면 된다.
마치 apt install, conda install이 있듯이 libtool install 이 있다고 생각하면 편하다.
구글 검색에는 libtool --mode=install 이라고 검색하면 된다.
libtool을 이용하여 libf77zmq.la를 install 하기 전에,
libf77zmq.la 파일 중 일부 코드를 수정할 필요가 있다.
다음을 수행하자.
- libf77zmq.la 파일을 open 후, 맨 아래 줄의 libdir 수정해준다
- libdir='/usr/local/lib’ 은 #을 통해 주석처리
- libdir='where/you/want/to/install’ 절대경로로 작성
ex) libdir='~/libzmq/external/f77_zmq/libs’ - 위의 예시는 어디까지나 내 컴퓨터 환경에서의 예시이다. 사용자 본인의 환경에 맞게 경로를 작성해 주자.
libf77zmq.la 파일을 수정한 후
terminal에서 다음 코드를 수행한다.
terminal의 dir은 현재의 경우 ~/libzmq/external/f77_zmq 이다.
F77_ZMQ libf77zmq.so file
f77_zmq 폴더에서 terminal을 open
$ libtool --mode=install install -c libf77zmq.la ~/(where/you/want/to/install)/libf77zmq.la
ex) $ libtool --mode=install install -c libf77zmq.la ~/libzmq/external/f77_zmq/libs/libf77zmq.la
$ libtool--finish ~/(where/you/want/to/install)
ex) $ libtool --finish ~/libzmq/external/f77_zmq/libs
위 코드가 제대로 수행되었다면
~/libzmq/external/f77_zmq/libs 경로에 libf77zmq.so 파일이 생성되었을 것이다.
-lf77zmq 대신 libf77zmq.so 파일을 가지고 Mytest.f90과 linking 해주면 된다.
F77_ZMQ gfortran Linking 2 Code
# 간단 Linking
gfortran -o Mytest Mytest.f90 -lzmq -lf77zmq
# 복잡 Linking
gfortran -o Mytest Mytest.f90 -lzmq libf77zmq.so
감사합니다.
'공부 > 프로그래밍' 카테고리의 다른 글
[zeroMQ] F77_ZMQ Linking using CMake (7) (0) | 2024.07.04 |
---|---|
[ubuntu] HDD 마운트 하는 법 (0) | 2023.11.03 |
[zeroMQ] F77_ZMQ 설치 (5) (0) | 2023.01.03 |
[zeroMQ] FZMQ 설치 (4) (0) | 2023.01.03 |
[zeroMQ] zeroMQ Fortran (3) (0) | 2023.01.03 |
댓글