Chào các anh chị trên HVA,
Em không phải là dân chuyên về lập trình nên có thể câu hỏi không sát nghĩa, mong mọi người bỏ qua.
Vấn đề của em là tạo ra 1 thư viện liên kết động sử dụng ngôn ngữ Fortran và gọi các hàm trong thư viện đó bằng 1 ngôn ngữ khác (ví dụ như C/C++). Lý do em phải làm việc trên vì mục đích sử dụng ngôn ngữ lập trình để giải quyết bài toán khoa học. Vì vậy, rất nhiều hàm, thủ tục của các thuật toán khoa học được viết trên Fortran mà các ngôn ngữ khác có thể không có.
Đi vào vấn đề chính, hiện tại em sử dụng bộ biên dịch GCC để lập trình.
Trong đó, ví dụ 1 subroutine fortran đơn giản, em đặt là testF.f:
Code:
subroutine testF(a)
!DEC$ ATTRIBUTES DLLEXPORT :: testF
a = a*2
return
end
Sau đó tiến hành biên dịch:
Code:
g77 -O2 -c testF.f
dllwrap --export-all-symbols testF.o -o testF.dll
Sau đó sử dụng Code C, testC.c:
Code:
#include <stdlib.h>
#include <stdio.h>
__declspec(dllimport) int __cdecl testf_(int a);
int main(int argc, char** argv)
{
printf("%d\n", testf_(2));
return EXIT_SUCCESS;
}
Với lệnh:
Code:
gcc -c -o testC.o testC.c
gcc -o test.exe -s testC.o -L. -ltestF
Tuy nhiên không thể chạy được file test.exe vừa build, mọi người giúp em đưa ra ý kiến với ạ.
Em cám ơn,