LD_LIBRARY_PATH可以指定so动态库的搜索路径。
今天在服务器上安装luarocks install lzmq时因为没有root权限,我先在另一台和服务器的gcc版本一样的机器上安装了lzmq,把zmq的include和lib文件拷贝到了我自己的zmq目录下,增加了LD_LIBRARY_PATH。安装成功:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/aifs/users/xyc43/tools/zmq
luarocks install lzmq ZMQ_DIR=/aifs/users/xyc43/tools/zmq
2017年8月3日星期四
2015年12月13日星期日
C和C++项目中的extern "C" {}
参见这篇帖子。
关于C语言中的extern,一个例子:
1.c文件如下:
#include <stdio.h>
int fun1(int i)
{
return i + 1;
}
void main()
{
int i;
extern int j;
extern int fun2(int i);
printf("%d\n", fun2(j));
}
2.c文件如下:
extern int fun1(int i);
int j = 3;
int fun2(int i)
{
return fun1(i) + 2;
}
编译运行:
$ gcc -c 1.c 2.c
$ gcc 1.o 2.o -o 1
$ ./1
输出结果为6.
关于C调用C++、C++调用C,请参考上面帖子链接中的例子。
对于C和C++的混合编译,参考这个帖子。
一个例子:
$ g++ -c cpp2c.cpp -o cpp2c.o
$ gcc -c csayhello.c -o csayhello.o
$ gcc cpp2c.o csayhello.o -lstdc++ -o cpp2c
注意到,在最后链接的时候指定 C++ 标准库是必须的,这是因为我们用的是 gcc 而不是 g++ 调用的链接器。最后如果使用的是 g++ 的话,C++ 标准库默认会被链接。
关于C语言中的extern,一个例子:
1.c文件如下:
#include <stdio.h>
int fun1(int i)
{
return i + 1;
}
void main()
{
int i;
extern int j;
extern int fun2(int i);
printf("%d\n", fun2(j));
}
2.c文件如下:
extern int fun1(int i);
int j = 3;
int fun2(int i)
{
return fun1(i) + 2;
}
编译运行:
$ gcc -c 1.c 2.c
$ gcc 1.o 2.o -o 1
$ ./1
输出结果为6.
关于C调用C++、C++调用C,请参考上面帖子链接中的例子。
对于C和C++的混合编译,参考这个帖子。
一个例子:
$ g++ -c cpp2c.cpp -o cpp2c.o
$ gcc -c csayhello.c -o csayhello.o
$ gcc cpp2c.o csayhello.o -lstdc++ -o cpp2c
注意到,在最后链接的时候指定 C++ 标准库是必须的,这是因为我们用的是 gcc 而不是 g++ 调用的链接器。最后如果使用的是 g++ 的话,C++ 标准库默认会被链接。
订阅:
博文 (Atom)