程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 實現一個so庫文件名稱為libupper.so提供給c/cpp調用

實現一個so庫文件名稱為libupper.so提供給c/cpp調用

編輯:C++入門知識

實現一個so庫文件名稱為libupper.so提供給c/cpp調用


要求:

實現一個so庫文件名稱為libupper.so,so文件中實現一個函數,函數名為void upper(const char *src, char *desc).

調用upper後將參數src所執行的字符串所有字符轉化為大寫字母,結構放入到desc字符串中。分別用c語言編寫一個

程序test1,調用libupper.so中的upper函數。用c++語言辯詞額一個程序test2,調用libupper.so中的upper函數。

//upper.c

 

#include 
void upper(const char *src, char *desc)
{
    int len = strlen(src);//獲取字符串長度
    int i = 0;
    for (; i < len; i++)
    {
        if ((src[i]>='a')&&(src[i]<='z'))//如果為小寫
        {
            desc[i] = src[i] - 0x20;//轉化為大寫
        } else
        {
            desc[i] = src[i];
        }
    }
}
//upper.h

 

 

#ifndef UPPER_H_
#define UPPER_H_
#ifdef __cplusplus
extern "C"{//c,cpp混合編程
#endif
void upper(const char *src, char *desc);
#ifdef __cplusplus
}
#endif
#endif /* UPPER_H_ */
//makefile

 

 

.SUFFIXES: .c .o
CC=gcc
SRCS=upper.c
    
OBJS=$(SRCS:.c=.o)
EXEC=libupper.so
all: $(OBJS)
    $(CC) -shared -o $(EXEC) $(OBJS) 
    @echo '-------------ok--------------'
.c.o:
    $(CC) -Wall -g -fPIC -o $@ -c $< 
clean:
    rm -f $(OBJS)
    rm -f core*
//test1.c test2.cpp

 

 

#include 
#include 
#include 
#include "upper.h"
int main()
{
    const char *s = "abc123def";
    char buf[100];
    memset(buf, 0, sizeof(buf));
    upper(s, buf);//將s轉化為大寫字符串
    printf("%s\n", buf);
    return 0;
}

 

make 編譯生成libupper.so
wuyingqiang@ty-kf1:~/1$ ls Makefile test1.c test2.cpp upper.c upper.h
wuyingqiang@ty-kf1:~/1$ make
gcc -Wall -g -fPIC -o upper.o -c upper.c
gcc -shared -o libupper.so upper.o -------------ok--------------

gcc test1.c -o test1 -L. -lupper

g++ test2.cpp -o test2 -L. -lupper

執行程序的時候,總是報錯找不到庫文件。 wuyingqiang@ty-kf1:~/1$ ./test1 ./test1: error while loading shared libraries: libupper.so: cannot open shared object file: No such file or directory
解決方法: cd 回到宿主目錄 vim .bash_profile
PATH=$PATH:$HOME/bin:. export PATH export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
然後保存文件
. .bash_profile 使其生效。




 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved