我可以使用gcc分别使用g ++或gfortran在c和c ++之间或c和fortran之间进行调用.但是如果我尝试在c ++和fortran之间进行过程调用,那么在使用g ++或gfortran编译时会出现错误,因为它们都不知道其他所需的库.如何链接使用c ++和fortran编写的源代码的项目?
$ cat print_hi.f90
subroutine print_hi() bind(C)
implicit none
write(*,*) "Hello from Fortran."
end subroutine print_hi
$ cat main.cpp
#include <iostream>
extern "C" void print_hi(void);
using namespace std;
int main() {
print_hi();
cout << "Hello from C++" << endl;
return 0;
}
$ gfortran -c print_hi.f90 -o print_hi.o
$ g++ -c main.cpp -o main.o
Run Code Online (Sandbox Code Playgroud)
我尝试用g ++链接:
$ g++ main.o print_hi.o -o main
print_hi.o: In function `print_hi':
print_hi.f90:(.text+0x3f): undefined reference to `_gfortran_st_write'
Run Code Online (Sandbox Code Playgroud)
以及有关未定义引用的更多错误.
并与gfortran:
$ gfortran …Run Code Online (Sandbox Code Playgroud) alert(Math.cos(Math.PI/2));
为什么结果不准确为零?这是不准确,还是某些实现错误?
我知道extern C意味着函数应该用C风格编译但是extern function_datatype functionname是什么意思?
extern void sharelog(const char *rem_host, const char *username,
const char *, const char *,
const char *, const char *);
Run Code Online (Sandbox Code Playgroud)
没有"C"的extern是什么意思?
此外,在几乎每个程序的头文件中,我都看到了类似的东西
void sharelog(const char *rem_host, const char *username,
const char *, const char *,
const char *, const char *);
Run Code Online (Sandbox Code Playgroud)
如果在.c/.cpp文件中完成,为什么要再次声明该函数?它有时也会在没有它的论证的情况下宣布
int Function;
Run Code Online (Sandbox Code Playgroud)
此外,一些函数可以这样写:
int CSomething::Somefunction() const
Run Code Online (Sandbox Code Playgroud)
为什么在函数后添加const?
我也偶然发现了具有这些神秘点的功能
void function(int prio, const char *fmt, ...)
Run Code Online (Sandbox Code Playgroud)
还有很多其他的东西我也想问,但似乎我已经问过了.我知道有些人可能会说去学习C/C++,但是相信我,这些东西不是为初学者讨论的.
package com.mycontainer;
public class MyContainer {
private static ContainerConfig cConfig;
private MyContainer() {
}
public static ContainerConfig getConfiguration() {
if (cConfig == null)
cConfig = new ContainerConfig();
return cConfig;
}
}
Run Code Online (Sandbox Code Playgroud)