首页 > 学院 > 开发设计 > 正文

linux生成.so,查找编译问题之杂文

2019-11-11 05:19:07
字体:
来源:转载
供稿:网友
rm -rf file //强制删除所有文件rm -r file  //对于大文件夹会出现?的提问set wrap   //换行.xz 文件解压xz -d +文件查找文件find / -name +文件名linux下include包含绝对路径,并且包含库文件很严格,例如在windows下包含<iostream>即可使用PRintf,但是linux下必须包含<stdio.h>拷贝:cp: omitting directory 说明文件里有许多文件,采用:cp -r //命令来进行递归拷贝动态连接库生成:g++ -shared -fPIC -o lib[文件名].so  [源代码].cpp  ++连接:g++ main.cpp  -L.  -l[库文件名不含lib和.so] -o main-L.--表示在当前文件查找或者将:-o  main.cpp放在最后g++ -o main -L/liu/project/lib/ -ltiger main.cpp说明:g++编译器,-o:表示输出可执行文件,-L:表示去哪个目录下寻找,-l:表示要寻找的库文件名称使用库函数将.so 文件cp到/usr/lib下(不建议使用),或者建立一个自己lib使用全局变量export LD_LIBRARY_PATH=[lib的绝对目录]export LD_LIBRARY_PATH=./ 或 export LD_LIBRARY_PATH=/绝对路径///好像过一段时间就要执行一次./main就可执行。三个文件:main.cpp  tiger.h  add.cpp  sub.c 如下1.add.cpp   1 int add(int a,int b)  2 {  3 return a+b;  4 }2.sub.c  1 int sub(int a,int b)  2 {  3 return a-b;  4 }3.tiger.h  1 #ifndef _TIGER_  2 #define _TIGER_  3   4 int add(int a, int b);  5 int sub(int a ,int b);  6   7 #endif4.main.cpp  1 #include <iostream>  2 #include "tiger.h"  3   4 using namespace std;  5 int main()  6 {  7   8 cout<<"program start............."<<endl;  9 cout<<"sub(9,2)==  "<< sub(9,2)<<endl; 10 cout<<"add(9,2)==  "<<add(9,2)<<endl; 11  12 return 0; 13 }生成共享库文件的命令g++ -shared -fPIC -o libtiger.so add.cpp sub.c 在文件中出现libtiger.so 使用共享文件库g++ -o main -L. -ltiger main.cpp出现main文件,执行./main会出现错误,是因为执行文件时候搜索的路径并没有搜索当前路径,最常用的做法就是把当前的路径加入,入前文所述export LD_LIBRARY_PATH=./,在执行即可Makefile文件编写方式: objects=main.o  *.o ...tags:$(objects)comandclean:rm tags $(objects)objects:目标文件tags:需要依靠objects生成conmand:生成tags需要执行的命令clean:清除命令例子1object= main.o add.o sub.o edit:$(object)         g++ -o edit  $(object)   main.o: tiger.h       g++ -c main.cppadd.o: tiger.h       g++ -c add.cppsub.o: tiger.h       g++ -c sub.c clean:          rm edit $(object)例子2:加载.so文件的情况object= main.cpp    2 edit:$(object)  3         g++ -o edit -L/liu/project/lib/ -ltiger $(object)  4  clean:          rm edit $(object)例子2直接生成目标文件,不需要中间文件,前边的空格是TAB。makefile文件示例PROGRAM_NAME=tagmatPROGRAM_HOME=..LPATH=${PROGRAM_HOME}/${PROGRAM_HOME}/local/libLOCALPATH=${FDK}INCLUDE_TAG=-I${PROGRAM_HOME}/src -I$(LPATH)/../includeCXX=g++CFLAGS=-O3SRC=$(wildcard *.cpp)OBJ=$(patsubst %.cpp,%.o,$(SRC))## Make rules starts here, you should need to edit anything below this line#all : ${PROGRAM_NAME}@(if [ ! -d ${LPATH} ]; then mkdir ${LPATH}; fi)@(mv ${PROGRAM_NAME} ${LPATH}/${PROGRAM_NAME})${OBJ} : ${SRC} ${HEADER}$(CXX) $(CFLAGS) -c ${SRC} ${INCLUDE_TAG}${PROGRAM_NAME} : ${OBJ}$(CXX)  $(CFLAGS) -o ${PROGRAM_NAME} ${OBJ} -L${LPATH}/ -lmatio  -lz  clean:rm -rf *.o ${LPATH}/${PROGRAM_NAME}错误1.makefile:2: *** unterminated variable reference.  Stop.make文件的语法错误,缺少(,2.make: *** No rule to make target `libtiger.so', needed by `main.o'.  Stop.语法错误//Ubuntu 编译时候,出现/tmp/..main.o错误,重新编译gcc_5.2.0后问题竟然消失了,奇怪//写好makefile文件编译时候,出现不兼容,查看.so 文件是64位,ubuntu是32位,换centos6.5环境抓包命令:tcpdump -i -n 网卡 host ip  and /(ip or ip .../)表示抓从本地主机到服务器端口的包。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表