美文网首页
读文章笔记:Creating a Shared Library

读文章笔记:Creating a Shared Library

作者: louyang | 来源:发表于2017-11-22 18:21 被阅读8次

    程序的目的是,提供C或C++的接口,判断一个字符串是否为回文。

    pal.h

    int is_palindrome (char * word);
    

    pal.hpp

    class palindrome {
    public:
        palindrome ();
        bool is_palindrome (char * word);
    };
    

    pal.cpp

    #include "pal.hpp"
    #include <string.h>
    
    using namespace std;
    
    extern "C" int is_palindrome (char * word)
    {
        int ret = 1;
        char * p = word;
        int len = strlen (word);
        char * q = &word[len-1];
    
        for (int i = 0 ; i < len ; i++, p++, q--)
        {
            if (*p != *q)
            {
                ret = 0;
            }
        }
        return ret;
    }
    
    bool palindrome::is_palindrome (char * word)
    {
        bool ret = true;
        char * p = word;
        int len = strlen (word);
        char * q = &word[len-1];
    
        for (int i = 0 ; i < len ; i++, p++, q--)
        {
            if (*p != *q)
            {
                ret = false;
            }
        }
        return ret;
    }
    

    编译出 pal.o:

    # g++ -fPIC pal.cpp
    # ls
    pal.cpp  pal.h  pal.o
    

    生成 libpal.so:

    # ld -shared pal.o -o libpal.so
    # ls
    libpal.so  pal.cpp  pal.h  pal.o
    
    # sudo mv libpal.so /usr/lib64
    # sudo ldconfig
    # sudo ldconfig -p | grep libpal
            libpal.so (libc6,x86-64) => /lib64/libpal.so
    

    C++ 程序

    接下来,我们创建一个 main.cpp 来调用这个共享库中的函数:

    main.cpp

    #include "pal.hpp"
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        palindrome a;
    
        while (1)
        {
            char buffer[64] = {0};
            cin >> buffer;
    
            if (a.is_palindrome(buffer))
            {
                cout << "Word is a palindrome" << endl;
            }
            else
            {
                cout << "Word is not a palindrome" << endl;
            }
        }
    
        return 0;
    }
    

    生成可执行文件 a.out :

    # g++ main.cpp -lpal
    
    $ ./a.out
    ada
    Word is a palindrome
    team
    Word is not a palindrome
    

    C 程序

    main.c

    #include "pal.h"
    #include <stdio.h>
    #include <unistd.h>
    #include <string.h>
    
    int main()
    {
        while (1)
        {
            char buffer[64] = {0};
            read(STDIN_FILENO, buffer, 60);
    
            int len = strlen(buffer);
            buffer[len-1] = 0;
    
            if (is_palindrome(buffer))
            {
                printf ("Word is a palindrome\n");
            }
            else
            {
                printf ("Word is not a palindrome\n");
            }
        }
    
        return 0;
    }
    

    生成可执行文件 b.out :

    # gcc main.c -lpal -o b.out
    
    $ ./b.out
    ada
    Word is a palindrome
    team
    Word is not a palindrome
    

    参考文章链接

    1 Creating a Shared Library
    2 Installing and Accessing Shared Libraries
    3 C++ Dynamic Shared Library on Linux

    相关文章

      网友评论

          本文标题:读文章笔记:Creating a Shared Library

          本文链接:https://www.haomeiwen.com/subject/tjfnvxtx.html