AIX下创建C++共享库

1.创建一个简单的so库文件,头文件和cpp文件如下:

test.h:

 1 #ifndef __TEST_H__
 2 #define __TEST_H__
 3
 4 #include <iostream>
 5
 6 class test
 7 {
 8 public:
 9     int printHello();
10 };
11
12 #endif

test.cpp:

1 #include "test.h"
2
3 int test::printHello()
4 {
5     std::cout << "Hello, C++" << std::endl;
6     return 0;
7 }

编译命令:

[[email protected] temp]$ xlC_r -c test.cpp -o test.o
[[email protected] temp]$ makeC++SharedLib test.o -p0 -o libTest.so
[[email protected] temp]$ ls -l libTest.so
-rwxrw----    1 tortoise    user       55250 2014-07-10 15:48 libTest.so
[[email protected] temp]$ file libTest.so
libTest.so: executable (RISC System/6000) or object module not stripped
[[email protected] temp]$ 

2.在main函数里调用:

main.cpp:

1 #include "test.h"
2
3 int main()
4 {
5     test A;
6     A.printHello();
7     return 0;
8 }

编译命令:

[[email protected] temp]$ xlC_r main.cpp -L. -lTest -o main
ld: 0706-006 Cannot find or open library file: -l Test
        ld:open(): A file or directory in the path name does not exist.
[[email protected] temp]$

libTest.so 文件命名在当前目录下,为何提示找不到呢?

经过搜索后,加上 -brtl 参数就可以了:

[[email protected] temp]$ xlC_r main.cpp -brtl -L. -lTest -o main
[[email protected] temp]$ ls -l main
-rwxrw----    1 tortoise    user       10177 2014-07-10 15:52 main
[[email protected] temp]$ ldd main
main needs:
         /data/app1/lich1/test/personal/libTest.so
         /usr/lib/libC.a(shr.o)
         /usr/ccs/lib/libpthreads.a(shr_xpg5.o)
         /usr/ccs/lib/libc.a(shr.o)
         /usr/ccs/lib/librtl.a(shr.o)
         /usr/lib/libC.a(ansi_32.o)
         /usr/lib/libC.a(ansicore_32.o)
         /usr/lib/libC.a(shrcore.o)
         /usr/ccs/lib/libpthreads.a(shr_comm.o)
         /unix
         /usr/lib/libcrypt.a(shr.o)
         /usr/lib/libC.a(shr2.o)
         /usr/lib/libC.a(shr3.o)
[[email protected] temp]$ ./main
Hello, C++
[[email protected] temp]$

AIX下创建C++共享库

时间: 2024-11-02 09:31:34

AIX下创建C++共享库的相关文章

转载: linux下创建svn代码库

linux下创建svn代码库 1.安装svn客户端 2.创建svn代码库 1.安装svn客户端 1.1.使用命令安装 1)CentOS $ yum install subversion 2)ubuntu sudo apt-get install subversion 1.2.源码安装 http://www.cnblogs.com/fengbohello/p/4142810.html 2.开启svn服务进程 2.1.我的习惯是把代码仓库放在/opt/svn目录下,所以先创建目录/opt/svn $

关于linux下GCC生成共享库(动态链接库)的探究

下面列出了我在对共享库(动态链接库)编写以及使用时遇到的几个简单问题进行探究和解答: 参考文档:http://www.cnblogs.com/likwo/archive/2012/05/09/2492225.html 1.静态库.动态链接库.共享库有什么区别? 静态库(windows下为.lib,linux下为.a)是在程序编写前就编译到目标程序中了,而动态链接库(windows下为.dll)可以在程序执行的任何时候被动态加载.共享库(linux下为.so)是在程序启动的时候加载到程序中. 1)

Linux 下 GCC 编译共享库控制导出函数的方法

通过一些实际项目的开发,发现这样一个现象,在 Windows 下可以通过指定 __declspec(dllexport) 定义来控制 DLL(动态链接库)中哪些函数可以导出,暴露给其他程序链接使用,哪些函数是 DLL 内部自己使用:而在 Linux 下不存在 dllexport 这样的指示字,默认情况下 GCC 编译 SO(共享库)时把代码中的所有函数都导出了,那么如何实现 Windows 下的那种效果,由我们自己来控制共享库导出函数呢? 其实在 Linux 下也有类似的控制机制.在 GCC 帮

linux下创建svn代码库

1.安装svn客户端 2.创建svn代码库 1.安装svn客户端 1.1.使用命令安装 1)CentOS $ yum install subversion 2)ubuntu sudo apt-get install subversion 1.2.源码安装 http://www.cnblogs.com/fengbohello/p/4142810.html 2.开启svn服务进程 2.1.我的习惯是把代码仓库放在/opt/svn目录下,所以先创建目录/opt/svn $ mkdir /opt/svn

AIX下配置NFS共享给LINUX

需求:linux客户端通过nfs共享aix服务端的某个目录 环境: 服务端:AIX 6.1  192.168.0.1/bsiptest 客户端:RHEL 5.5和RHEL 6.1   192.168.0.32/weblogic.192.168.0.3/dc 共享目录:/nfs/share 服务端: 1.停止nfs和portmap两个进程: #stopsrc -g nfs #stopsrc -s portmap 2.编辑hosts文件,添加nfs客户端信息 vi /etc/hosts 192.16

aix 下创建vg和lv

1.LVM背景介绍 在AIX中,磁盘管理策略是一种Logical Volume Management的方法.简单的说,就是将存储划分为物理卷PV(Phsical Volume).逻辑卷组VG(Logical Volume Group)和逻辑卷LV(Logical Volume)三个层次进行管理. 物理卷是我们最直观的磁盘或者分区,操作系统中可能有多种存储设备.在LVM中,都将其视为物理卷对象(PV). 若干物理卷可以划归到一个逻辑组织中进行统一管理,这就是逻辑卷组(Logical Volume

ubuntu下借助qt creator创建属于自己的共享库

简介: 在 Windows 上,共享库由 .dll 表示:在 Linux 上,由 .so 表示. Shared Library的优势 共享库,又称动态库或so文件,顾名思义,它可以在可执行文件启动时加载或进程运行期被调用.使用共享库有很多好处,例如(包含但不限于下面提到的场景): 1) 减少了依赖共享库的模块的大小,因为它们不必把共享库提供的功能的实现代码静态编译到自己的模块代码中. 2) 在同一台机器上运行的多个进程会在内存中共享同一份动态库,操作系统采用的这种内存布局方式可以极大地节省机器内

QT共享库的创建与调用(初级)

背景: 最近在做的一个项目其中一部分既是实现PC与下位机的USB通信.windows平台下已经完成,现需移植到linux平台下. 在linux系统中,通过一段时间的工作,设备已被配置成hid类(后续再详述),并以hidraw类设备节点存在于系统中"/dev/"下.上位机则成功在console中通过调用HIDAPI库来写入.读取hidraw设备节点信息(后续再详述),而进一步的图形界面则需由QT来完成. hidraw设备介绍: https://www.kernel.org/doc/Doc

Linux静态库和共享库

1.什么是静态库静态库类似windows中的静态lib 关于windows中的静态lib,可参考 Windows动态链接库DLL 特点:包含函数代码声明和实现,链接后所有代码都嵌入到宿主程序中. 只在编译时使用,执行时不再需要该静态库. 2.静态库编写示例如下:addvec.c void addvec(int* x, int* y, int*z, int n) { int i=0; for(; i< n;++i) z[i] = x[i] + y[i]; } multvec.c void mult