zoukankan      html  css  js  c++  java
  • linux+vs2013编译静态库和动态库

    Linux下创建与使用静态库

    Linux静态库命名规则

    Linux静态库命名规范,必须是"lib[your_library_name].a"lib为前缀,中间是静态库名,扩展名为.a

    创建静态库(.a

    (1) 将代码文件编译成目标文件.otest.o

    命令:g++ -c  test.cpp 

    (2) 通过ar工具将目标文件打包成.a静态库文件

    命令:ar -crv libtest.a test.o

    生成静态库test.a


    使用静态库

    Linux下使用静态库,只需要在编译的时候,指定静态库的搜索路径(-L选项)、指定静态库名(不需要lib前缀和.a后缀,-l选项)。

    g++ test.cpp -L. -Itest

    l  -L:表示要连接的库所在目录

    l  -l:指定链接时需要的动态库,编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.a.so来确定库的名称。


    创建动态库(.so

    生成动态库

    g++ -shared -fPIC  test.cpp -o libtest.so 

    使用动态库

    cp libtest.so /usr/lib

    g++ TestDynamicLibrary.cpp -L. -ltest -o test

    ./test

    vs2013创建动态库

    (1)新建win32控制台应用程序

    (2)应用程序类型选择静态库

    (3) stdafx.h 头文件写函数声明, stdafx.cpp写函数定义

    (4)右键项目,生成。在Debug目录下生成静态库。

    测试静态库:

    (1)新建win32控制台应用程序

    (2)选择空项目

    (3)添加源文件,写c++程序。

    (4)将静态库文件夹下的stdafx.htargetver.h文件和静态库lib文件三个都拷入到现在工程下的工程名目录下

    (5)

    #include <iostream>
    #include "stdafx.h" //头文件
    #pragma comment (lib,"TestStaticLibrary")//添加静态库
    using namespace std;
    
    int main()
    {
        cout << jiafa(1, 2) << endl;
        cout << jianfa(1, 2) << endl;
        return 0;
    }

    vs2013动态库

    (1)新建win32控制台应用程序

    (2)应用程序类型选择动态库

    (3) stdafx.h 头文件写函数声明

    extern __declspec(dllexport) int add(int a, int b);

    stdafx.cpp写函数定义

    int add(int a, int b)
    {
        return a + b;
    }

    (4)右键项目,生成。在Debug目录下生成静态库。在debug目录下,可以看见生成一个dll和lib

    测试:

    (1)新建win32控制台应用程序

    (2)选择空项目

    (3)添加源文件,写c++程序。

    (4)将静态库文件夹下的stdafx.h和targetver.h文件和静态库lib文件三个都拷入到现在工程下的工程名目录下

    (5)TestDLL.dll拷贝到debug文件夹下,和exe在同一目录,不然运行时候找不到动态库

    #include <iostream>
    #include "stdafx.h" //头文件
    #pragma comment (lib,"TestDLL.lib")//添加静态库
    using namespace std;
    
    int main()
    {
        cout << add(1, 2) << endl;
    
        return 0;
    }
  • 相关阅读:
    《java.util.concurrent 包源码阅读》10 线程池系列之AbstractExecutorService
    《java.util.concurrent 包源码阅读》09 线程池系列之介绍篇
    《java.util.concurrent 包源码阅读》08 CopyOnWriteArrayList和CopyOnWriteArraySet
    《java.util.concurrent 包源码阅读》07 LinkedBlockingQueue
    《java.util.concurrent 包源码阅读》06 ArrayBlockingQueue
    《java.util.concurrent 包源码阅读》05 BlockingQueue
    NewBluePill源码学习 <一>
    深入理解Windows X64调试
    x64 结构体系下的内存寻址
    Windows PAE 寻址
  • 原文地址:https://www.cnblogs.com/crazybird123/p/7807033.html
Copyright © 2011-2022 走看看