使用带有Makefile的C ++中的另一个库来构建动态库

如何解决使用带有Makefile的C ++中的另一个库来构建动态库

我正在使用artoolkit5。我对nftSimple进行了更改,并向nftSimple代码添加了另一个程序,该程序在artoolkit5文件夹和环境中运行良好。但是,我想将nftSimple制作成一个库(包括添加的程序)。

我正在尝试使用所有代码创建一个动态库。这是我用来构建.so文件的Makefile

UNAME = $(shell uname)

AR_HOME = ../..
AR_CPPFLAGS = -I$(AR_HOME)/include/linux-x86_64 -I$(AR_HOME)/include
AR_LDFLAGS = -L$(AR_HOME)/lib/linux-x86_64 -L$(AR_HOME)/lib

CC=gcc
CXX=g++ -std=c++11
CPPFLAGS = $(AR_CPPFLAGS)
CFLAGS = -O3 -shared -fPIC -march=core2 -DHAVE_NFT=1 -DUSE_GSTREAMER_1 -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/Opt/opencv/include
CXXFLAGS = -O3 -shared -fPIC -march=core2 -DHAVE_NFT=1 -DUSE_GSTREAMER_1 -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include
LDFLAGS = $(AR_LDFLAGS) -L/usr/lib/x86_64-linux-gnu -L/usr/lib64
LIBS = -lKPM -lAR2 -lARgsub_lite -lARvideo -lAR -lARICP -lAR -lARUtil \
     -lglut -lglu -lGL -lX11 -lm -lpthread -ljpeg -lz -ludev -DUSE_GSTREAMER_1 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -ldc1394 -lraw1394  
AR=ar
ARFLAGS=rsU
RANLIB = true

TARGET = $(AR_HOME)/bin/libnftsimple.so 

HEADERS = \
    trackingSub.h \
    vectors.h \
    nftSimple.h

OBJS = \
    nftSimple.o \
    ARMarkerNFT.o \
    trackingSub.o \
    vectors.o

default build all: $(TARGET)

$(OBJS) : $(HEADERS)

$(TARGET): $(OBJS)
    $(CXX) -shared -fPIC $(LDFLAGS) -o $@  $^ $(LIBS) 

clean:
    -rm -f *.o *~ *.bak
    -rm $(TARGET)

allclean:
    -rm -f *.o *~ *.bak
    -rm $(TARGET)
    -rm -f Makefile

distclean:
    rm -f *.o
    rm -f Makefile

我不确定这是否是构建可包含所有依赖项和其他库(位于artoolkit的libs文件夹中)的库的正确方法

我想要的是:一个.so文件,其中包含使代码正常工作所需的所有依赖项和文件夹。这样,我只想#include头文件并在另一个程序中使用函数调用

我用来编译第二个程序的makefile(将使用artoolkit库):

CC       = g++
CFLAGS   = -Wall
LDFLAGS  = -L. -lnftsimple
OBJFILES = main.o
TARGET   = main
all: $(TARGET)
$(TARGET): $(OBJFILES)
    $(CC) $(CFLAGS) -o $(TARGET) $(OBJFILES) $(LDFLAGS)
clean:rm -f $(OBJFILES) $(TARGET) *~

不确定这是否正确。请随时提供任何帮助或输入

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?