gcc静态动态库编译

centos5.8,g++4.1.2

最近操作比较多,小小笔记下

静态库,动态库编译和链接

//1.DynamicMath.h

class DynamicMath
{
public:

static double add(double a, double b);
static double sub(double a, double b);

void print();
};

//2.DynamicMath.cpp

#include "DynamicMath.h"
#include <iostream>
using std::cout;
using std::endl;

double DynamicMath::add(double a, double b)
{
return a+b;
}

double DynamicMath::sub(double a, double b)
{
return a-b;
}
void DynamicMath::print()
{
cout<<"DynamicMath"<<endl;
}

//3.main.cpp

#include <iostream>
using namespace std;

#include "DynamicMath.h"

int main()
{
double a = 10;
double b = 2;

cout<<"a + b= "<<DynamicMath::add(a, b)<<endl;
cout<<"a - b= "<<DynamicMath::sub(a, b)<<endl;

DynamicMath dy;
dy.print();

return 0;
}

//4.makefile

all: main smath smain dmath dmain

main:
g++ -o main main.cpp DynamicMath.cpp

smath:
g++ -c DynamicMath.cpp
ar -rsv libsmath.a DynamicMath.o

smain:
g++ -o smain main.cpp -L./ -lsmath

dmath:
g++ -fPIC -shared -o libdmath.so DynamicMath.cpp

dmain:
g++ -o dmain -L./ -ldmath main.cpp -Wl,-rpath ./

clean:
rm -f *.o
rm -f *.a
rm -f *.so
rm -f main
rm -f smain
rm -f dmain

时间: 2024-12-06 12:15:08

gcc静态动态库编译的相关文章

C/C++ 跨平台交叉编译、静态库/动态库编译、MinGW、Cygwin、CodeBlocks使用原理及链接参数选项

目录 0. 引言 1. 交叉编译 2. Cygwin简介 3. 静态库编译及使用 4. 动态库编译及使用 5. MinGW简介 6. CodeBlocks简介 0. 引言 UNIX是一个注册商标,是要满足一大堆条件并且支付可观费用才能够被授权使用的一个操作系统.linux是unix的克隆版本,是由其创始人Linus和诸多世界知名的黑客手工打造的一个操作系统.为什么linux和unix之间有很多软件可以很轻松的移植?因为linux也满足POSIX规范,所以在运行机制上跟unix相近.同时,POSI

[转]vs2010 静态库以及动态库编译实例

转载地址:http://blog.csdn.net/wswxfwps/article/details/31788703 有网友留言,指出了本文中有错的地方,在此谢谢指摘. 重新编辑了一下本文,新添加了一些东西以及到目前为止对静态库和动态库的心得理解和心得,和大家分享 最近在研究ffmpeg,由于用c#开发,而ffmpeg采用的是c开发,因此打算先用c将ffmpeg的一些函数封装成库,在用c#来调用,花了一天时间(确实水平太低)写了几个vs2010下的静态库以及动态库的编译实例. 一.vs2010

Linux gcc链接动态库出错:LIBRARY_PATH和LD_LIBRARY_PATH的区别

昨天在自己的CentOs7.1上写makefile的时候,发现在一个C程序在编译并链接一个已生成好的lib动态库的时候出错.链接命令大概是这样的: [[email protected] tcpmsg]# gcc -o hello main.c -lmyhello /usr/bin/ld: cannot find -lmyhello collect2: error: ld returned 1 exit status 1 gcc链接动态库时的搜索路径 自以为在当前工程中设置好了环境变量 LD_LI

Eclipse框架下rtklib动态库编译

1.前言 RTKLIB是全球导航卫星系统GNSS(global navigation satellite system)的标准&精密定位开源程序包,包含了丰富的导航定位算法应用.通信协议接口和各类函数库API,具体内容可参考笔者博文<RTKLIB编译及RTCM数据读取样例>. 目前网络上流传的rtklib动态库编译博文多是基于Microsoft Visual Studio框架,这主要是由于国人习惯于使用微软Windows操作系统的缘故,而rtklib本质上是一个跨平台的导航定位库,其在

Windows下64位SQLite3.10动态库编译

在开始动手编译之前,先让我们对SQLite有一个初步的认识: SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl.C#.PHP.Java等,还有ODBC接口,同样

linux静态库和动态库编译

今天要用到静态库和动态库,于是写了几个例子来巩固一下基础.hello1.c ———————————————————— #include <stdio.h>void print1(int i) { int j; for(j=0;j<i;j++) { printf("%d * %d = %d\n",j,j,j*j); }    }hello2.c _________________________________________________ #include <

Linux高级编程--02.gcc和动态库

在Linux环境下,我们通常用gcc将C代码编译成可执行文件,如下就是一个简单的例子: 小实验:hello.c #include <stdlib.h> #include <stdio.h> void main(void) { printf("hello world!\r\n"); } 可以通过如下指令来编译出一个可执行文件: gcc hello.c 执行完该命令后,就会得到一个a.out的可执行文件. 编译的过程 前面的例子只是简单的介绍了一下gcc的使用方法,

安卓之Android.mk多文件以及动态库编译

1.多文件编译 多文件编译共有两种方式: (1) 在Android.mk中一一添加 LOCAL_PATH:= $(call my-dir) #定义当前模块的相对路径 include $(CLEAR_VARS) #清空当前环境变量 LOCAL_MODULE:= test #编译生成的目标名称 LOCAL_SRC_FILES := test1.c \ test2.c \ test3.c #编译该模块所需要的源文件 # LOCAL_MODULE_PATH:=$(LOCAL_PATH) #在当前目录生成

GCC生成动态库

以下内容仅作为本人工作笔记 main.c 1 #include <stdio.h> 2 void hello(void); 3 int main(int argc, char ** argv) { 4 printf("This is main function!\n"); 5 hello(); 6 return 0; 7 } hello.c 1 #include <stdio.h> 2 void hello() { 3 printf("This is