Mingw编译第三方开发包生成库文件,而第三方库文件依赖Boost库

zhangxing1008 2016-06-03 10:25:24
问题是这样的,最近在开发一款激光雷达,厂家提供了SDK开发包“IbeoSDKX.X.X”,按照厂家给的编译要求,在VS工程中可以编译生成相应的库文件,用于开发。

即直接打开ibeosdk_VS2010.sln工程文件,build一下,就可以生成库文件。但是由于这个开发包依赖于Boost库,所以在Build之前,需要在ibeosdk_VS2010.sln这个工程中设置Boost库版本信息和路径设置。具体如下:
- set your boost version and the path to it: 设置boost版本
--> Open the Property Manager (see VS menu bar: View/Property Manager).
--> unfold the ibeosdk item
--> unfold the Debug | Win32 item
--> open BoostX86SettingPropertySheet by double click
--> Common Properties
--> User Macros (用户宏)
--> Set the four environment variables so that the compiler and linker will find the include files and libraries:
BoostVersionInLibname: The version number of boost used in the library names, e.g. 1_52
BoostVersionInPath: The version number of boost used in the directory path, e.g. 1_52_0
BoostDir: The place where to find the include files, e.g. C:\boost\$(BoostVersionInPath)
BoostLibDir: The directory where to find the libraries to link with, e.g. C:\boost\lib\x86\$(BoostVersionInPath)
Build之后,可以生成库文件和可执行文件。

现在想在Windows下的Qt Creator中进行开发,Qt编译器为Mingw,由于SDK中已经提供了Makefile文件,按照编译说明(Linux),只说明了要make一下,就可以编译生成库文件,但是在gcc编译器中编译之后并没有生成库文件。


由于在VS2010中编译库文件需要设置Boost库的版本信息和路径信息,我在想是不是在用Mingw编译的时候也需要设置Boost库的版本信息和路径信息,如果是,那应该怎么设置呢?在Mingw编译器中
...全文
591 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_34117140 2017-07-24
  • 打赏
  • 举报
回复
楼主你好,最近我也在搞ibeo的激光雷达,之前没有c++的开发经验,给的ibeosdk开发文档对于我来说有点困难,按照文档编译配置好boost库后,也生成了相应的库文件,之后就不知道该要怎么做了,想问问楼主这个ibeosdk怎么用?能不能给点建议
lqbk1 2016-06-05
  • 打赏
  • 举报
回复
1. 是的 2. 静态库内部不一样,所以才要区分开(两个模块用不同的编译器编译,通常解决方案是使用(只导出c接口的)静态库)
zhangxing1008 2016-06-04
  • 打赏
  • 举报
回复
引用 4 楼 lqbk1 的回复:
INCLUDEPATH = -I/usr/include/boost/ -I$(CURDIR)/src CXXFLAGS += $(INCLUDEPATH) CPPFLAGS += $(INCLUDEPATH) LIBS= -lrt -L/usr/lib -lboost_system -lboost_thread -lboost_date_time -lboost_program_options 自己在mingw下build一个boost(不能直接用vs那个),头文件copy到mingw对应的/usr/include/boost/目录 库文件copy到/usr/lib 楼主想用qt开发,这个思路没问题。 问题在于qt本质是个跨平台库,跟使用什么IDE没有直接关系,你可以直接用vs开发基于qt的程序。 就算你对Qt Creator情有独钟,也不必抱着mingw不放,qt Creator也可以配置成用vc编译器编译。 这些都不影响你跨平台,对目前的你来说,还能减轻不少工作量
嗯嗯,关于Qt跨平台的本质我也是在慢慢的摸索中了解到的,就是Qt库中底层代码的跨平台。包括IDE和编译器可以任意组合也是后面在摸索中逐渐了解到的,感谢您的回答。刚刚试了一下,还是有点问题。 INCLUDEPATH = -I/usr/include/boost/ -I$(CURDIR)/src CXXFLAGS += $(INCLUDEPATH) CPPFLAGS += $(INCLUDEPATH) LIBS= -lrt -L/usr/lib -lboost_system -lboost_thread -lboost_date_time -lboost_program_options makefile中的这一段是找编译出来的boost库的路径。如果我的boost库路径不是这个,是不是我在编译之前要在makefile中修改这个路径。如果是的话。比如我的Mingw编译器的目录是“C:\Qt\MinGW4_4\msys\1.0”,Mingw编译出来的Boost库的路径是“D:\boost_1_52_0” 是不是应该改成下面这样呢? INCLUDEPATH = -I/D:/boost_1_52_0/boost/ -I$(CURDIR)/src CXXFLAGS += $(INCLUDEPATH) CPPFLAGS += $(INCLUDEPATH) LIBS= -lrt -L/D:/boost_1_52_0/stage/lib -lboost_system -lboost_thread -lboost_date_time -lboost_program_options
lqbk1 2016-06-04
  • 打赏
  • 举报
回复
INCLUDEPATH = -I/usr/include/boost/ -I$(CURDIR)/src CXXFLAGS += $(INCLUDEPATH) CPPFLAGS += $(INCLUDEPATH) LIBS= -lrt -L/usr/lib -lboost_system -lboost_thread -lboost_date_time -lboost_program_options 自己在mingw下build一个boost(不能直接用vs那个),头文件copy到mingw对应的/usr/include/boost/目录 库文件copy到/usr/lib 楼主想用qt开发,这个思路没问题。 问题在于qt本质是个跨平台库,跟使用什么IDE没有直接关系,你可以直接用vs开发基于qt的程序。 就算你对Qt Creator情有独钟,也不必抱着mingw不放,qt Creator也可以配置成用vc编译器编译。 这些都不影响你跨平台,对目前的你来说,还能减轻不少工作量
zhangxing1008 2016-06-04
  • 打赏
  • 举报
回复
引用 2 楼 lqbk1 的回复:
makefile贴出来看看 另外这种问题,最合适的解决方法是联系厂家的工程师询问,而不是来论坛求助...... 还有,楼主为什么一定要把Qt Creator配置成使用mingw呢? 直接配置成vs编译不是更方便.? 如果你是学生,想多折腾多了解点东西,那无可厚非。但看你的描述,这是工作吧?工作不能太任性..........
感谢您的回答,是的,我是一个学生。VS里面编译确实是没有问题,我们现在已经能在VS里面进行开发,由于后面工作的需要,我们是现在PC上进行开发,然后要转到嵌入式系统上面去的,所以就想用Qt做一个跨平台的桥梁,现在Windows下的Qt中开发,然后再搬到嵌入式系统上面去。不知道这样的思路正确不,就用Qt进行跨平台。 哎,这个德国的一个厂家,国内只做代理,技术支持也不懂,醉了,然后邮件了国外的技术支持,还没回我。。。。。 Makefile文件如下:(有点多。。。。) .SUFFIXES: .o .cpp SDKVERSION=2.11.1 #At least DEBUG or OPTIMIZE has to be switched on OPTIMIZE=off DEBUG=on CXX=g++ CXXFLAGS = -Wall -ansi -pedantic -Wextra -Winit-self -Wno-long-long -Wformat -Wenum-compare -Wconversion -Wsign-conversion -Wshadow # -Wc++11-compat INCLUDEPATH = -I/usr/include/boost/ -I$(CURDIR)/src CXXFLAGS += $(INCLUDEPATH) CPPFLAGS += $(INCLUDEPATH) LIBS= -lrt -L/usr/lib -lboost_system -lboost_thread -lboost_date_time -lboost_program_options IBEOSDK_LIBNAME=ibeosdk export BASEDIR:=$(CURDIR) IBEOSDK_LIBDIR=$(BASEDIR)/libs export IBEOSDK_LIBDIR #determine the compiler flags depending on optimize/debug ifeq ($(OPTIMIZE),on) CXXFLAGS+= -O3 -DNDEBUG endif ifeq ($(DEBUG),on) CXXFLAGS+= -g3 endif #determine the output path and the library suffix depending on optimize/debug ifeq ($(OPTIMIZE),on) ifeq ($(DEBUG), on) export BUILDTYPE:=optwithdbg export LIBSUFFIX:=od else export BUILDTYPE:=optimized export LIBSUFFIX:= endif else ifneq ($(DEBUG), on) #$(error "At least DEBUG or OPTIMIZE has to be switched on") endif export BUILDTYPE:=debug export LIBSUFFIX:=d endif OBJFOLDER=$(CURDIR)/tmp/# OBJFOLDER:=$(OBJFOLDER)/$(BUILDTYPE) DEMOBINFOLDER=$(CURDIR)/bin/$(BUILDTYPE) TOOLSSOURCES=$(shell find src/tools -name "*.hpp" -o -name "*.cpp") SKIPFILES=$(TOOLSSOURCES) SOURCES=$(filter-out $(SKIPFILES), $(shell find . -name "*.cpp" -a ! -wholename "*unittests*" -a ! -wholename "*demo*" | sed 's_\./__')) OBJECTS=$(SOURCES:%.cpp=%.o) export CXX CXXFLAGS CPPFLAGS INCLUDEPATH LIBS OBJFOLDER DEMOBINFOLDER SKIPFILES export IBEOSDK_LIBNAME SDKVERSION DEMOSOURCES=$(shell find . -name "*.cpp" -a -wholename "*demo*") DEMOBINARIES=$(DEMOSOURCES:%.cpp=%) ################################################################################ # Library Targets ################################################################################ .PHONY : all static shared all shared: | libsdir $(MAKE) -f Makefile_shared LIBTYPE=shared static: | libsdir $(MAKE) -f Makefile_shared LIBTYPE=static ################################################################################ # Demo Targets ################################################################################ .PHONY : demos shareddemos staticdemos shareddemos : shared | bindir $(MAKE) -f Makefile_shared shareddemos LIBTYPE=shared # alias for shareddemos demos : shared | bindir $(MAKE) -f Makefile_shared shareddemos LIBTYPE=shared staticdemos : static | bindir $(MAKE) -f Makefile_shared staticdemos LIBTYPE=static #$(MY_TARGETS) ${DEMOBINARIES} #.NOTPARALLEL : #shared: BUILDSHARED=1 #shared: CXXFLAGS+=-fPIC #shared: | tmpdir_shared #shared: $(MY_TARGETS) libs/$(IBEOSDK_SO)-$(SDKVERSION) #libs/$(IBEOSDK_SO)-$(SDKVERSION): | libsdir # @echo "Create library "$(IBEOSDK_SO)-$(SDKVERSION) # @$(CXX) $(CXXFLAGS) -shared -o libs/$(IBEOSDK_SO)-$(SDKVERSION) $(OBJECTS) # @cd libs; rm -f $(IBEOSDK_SO); ln -s $(IBEOSDK_SO)-$(SDKVERSION) $(IBEOSDK_SO); cd .. #shareddemos: shared #shareddemos: ${DEMOBINARIES:%=%_shared} #static: tmpdir_static #static: $(MY_TARGETS) libs/$(IBEOSDK_STATIC)-$(SDKVERSION) #libs/$(IBEOSDK_STATIC)-$(SDKVERSION): | libsdir # @echo "Create library "$(IBEOSDK_STATIC)-$(SDKVERSION) # ar rs libs/$(IBEOSDK_STATIC)-$(SDKVERSION) $(OBJECTS) # @cd libs; rm -f $(IBEOSDK_STATIC); ln -s $(IBEOSDK_STATIC)-$(SDKVERSION) $(IBEOSDK_STATIC); cd .. #staticdemos: static #staticdemos: ${DEMOBINARIES:%=%_static} libsdir: @if [ ! -d libs ]; then mkdir libs; fi bindir: @if [ ! -d $(DEMOBINFOLDER) ]; then mkdir -p $(DEMOBINFOLDER); fi #tmpdir_shared: # echo "$(OBJTARGETSUBFOLDER)" # @if [ ! -d "$(OBJTARGETSUBFOLDER)/shared" ]; then mkdir -p $(OBJTARGETSUBFOLDER)/shared; fi #tmpdir_static: # echo "$(OBJTARGETSUBFOLDER)" # @if [ ! -d "$(OBJTARGETSUBFOLDER)/static" ]; then mkdir -p $(OBJTARGETSUBFOLDER)/static; fi ## need DEMO_RULE to add dependency to the demos object file. #define DEMO_RULE #$(1): $(OBJECTS) $($(1:%_shared.cpp=%.o):%_static.cpp=%.o) #endef #$(foreach t, $(DEMOBINARIES) $(DEMOBINARIES)_shared $(DEMOBINARIES)_static,$(eval $(call DEMO_RULE,$(t)))) #${DEMOBINARIES:%=%_shared} : $(OBJECTS) # $(CXX) $(CXXFLAGS) $(@:%_shared=%.o) -L$(PWD)/libs -libeosdk $(LIBS) -o $@ #${DEMOBINARIES:%=%_static} : $(OBJECTS) # $(CXX) $(CXXFLAGS) $(@:%_static=%.o) libs/libibeosdk.a $(LIBS) -o $@ #${DEMOBINARIES} : $(OBJECTS) # $(CXX) $(CXXFLAGS) ${@:%=%.o} $(OBJECTS) $(LIBS) -o $@ #.PHONY : $(MY_TARGETS) unittests cleanlibobjects clean democlean distclean docs docsclean # #$(MY_TARGETS): # @if [ $(BUILDSHARED) -eq 1 ]; then \ # $(MAKE) -C $@ shared; \ # else \ # $(MAKE) -C $@ static; \ # fi #unittests: # $(MAKE) all # $(MAKE) -C src unittests #cleanlibobjects: # $(MAKE) -C src/ cleanlibobjects ################################################################################ # Cleanup Targets ################################################################################ clean: | democlean @echo "Clean all compiled files for LIBTYPE=static and shared, DEBUG=$(DEBUG) and OPTIMIZE=$(OPTIMIZE)" @$(MAKE) -f Makefile_shared clean LIBTYPE=shared @$(MAKE) -f Makefile_shared clean LIBTYPE=static clean_shared: | democlean_shared @echo "Clean all compiled files for LIBTYPE=shared, DEBUG=$(DEBUG) and OPTIMIZE=$(OPTIMIZE)" @$(MAKE) -f Makefile_shared clean LIBTYPE=shared clean_static: | democlean_static @echo "Clean all compiled files for LIBTYPE=static, DEBUG=$(DEBUG) and OPTIMIZE=$(OPTIMIZE)" @$(MAKE) -f Makefile_shared clean LIBTYPE=static democlean: @$(MAKE) -f Makefile_shared democlean LIBTYPE=shared @$(MAKE) -f Makefile_shared democlean LIBTYPE=static democlean_shared: @$(MAKE) -f Makefile_shared democlean LIBTYPE=shared democlean_static: @$(MAKE) -f Makefile_shared democlean LIBTYPE=static # rm -f $(DEMOBINARIES) $(DEMOBINARIES:%=%_shared) $(DEMOBINARIES:%=%_static) *.d *.o distclean: rm -rf libs rm -rf tmp rm -rf bin @$(MAKE) docsclean docs: $(MAKE) -C src/ docs # Target for internal use to prepare a release zip file archive: $(MAKE) docs rm -f IbeoSDK$(SDKVERSION).zip git archive --format=zip -o IbeoSDK$(SDKVERSION).zip HEAD zip -9 IbeoSDK$(SDKVERSION).zip src/docs/html/* docsclean: $(MAKE) -C src/ docsclean
lqbk1 2016-06-04
  • 打赏
  • 举报
回复
makefile贴出来看看 另外这种问题,最合适的解决方法是联系厂家的工程师询问,而不是来论坛求助...... 还有,楼主为什么一定要把Qt Creator配置成使用mingw呢? 直接配置成vs编译不是更方便.? 如果你是学生,想多折腾多了解点东西,那无可厚非。但看你的描述,这是工作吧?工作不能太任性..........
zhangxing1008 2016-06-04
  • 打赏
  • 举报
回复
引用 6 楼 lqbk1 的回复:
mingw不一定能识别/D:/这种格式的路径,所以建议build完boost之后拷贝到msys的目录里 把头文件拷贝到“C:\Qt\MinGW4_4\msys\1.0\include\boost“ 把库文件拷贝到“C:\Qt\MinGW4_4\msys\1.0\lib“ makefile可以不动
哎,还是不行,还是得找他们的技术支持。不过还是谢谢您,这一段话让我对跨平台有了更加深刻的认识“楼主想用qt开发,这个思路没问题。 问题在于qt本质是个跨平台库,跟使用什么IDE没有直接关系,你可以直接用vs开发基于qt的程序。 就算你对Qt Creator情有独钟,也不必抱着mingw不放,qt Creator也可以配置成用vc编译器编译。 这些都不影响你跨平台,对目前的你来说,还能减轻不少工作量” 不过还是有几点疑问还是想请教一下您,在网上也看了一些博客,太多了,感觉很混乱: 1、如果现在在Windows环境下,我选择用Qt Creator的IDE +VC的编译器+ Qt库进行开发,是不是我就直接可以用我在VS2010下编译生成的库文件。然后如果我想将程序移植到Linux环境下运行,也用Qt Creator这个IDE,然后编译器用默认的gcc,是不是需要重新用gcc编译器编译SDK生成Linux系统下的库文件。 2、有一个疑问就是对于同一个.c源代码,用不同的编译器编译生成的目标文件是否是一样的?就比如我的这个SDK开发包,在他的说明里面明确指出了不同环境(Windows和Linux)下的编译方式来生成库文件,但是编译需要的头文件和源代码都是一样的,如果各种都编译成功的话,在VS2010生成的是一个名为“.lib”的文件,gcc生成的是一个“.a”文件,那么这两个文件的内部是不是一样的呢?
lqbk1 2016-06-04
  • 打赏
  • 举报
回复
mingw不一定能识别/D:/这种格式的路径,所以建议build完boost之后拷贝到msys的目录里 把头文件拷贝到“C:\Qt\MinGW4_4\msys\1.0\include\boost“ 把库文件拷贝到“C:\Qt\MinGW4_4\msys\1.0\lib“ makefile可以不动

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧