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编译器中
...全文
593 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可以不动
avbot 连通 IRC、XMPP 和 QQ群, 并作为 AVIM 群机器人实现 AVIM 群聊功能. 能实时记录聊天信息。每日自动生成新的日志文件。使用方法和介绍参考 社区维基的avbot介绍编译请参考 社区维基的avbot编译指导For Windows 编译注意windows 版本有自动编译版,请到 ftp://ci.avplayer.org 下载。想了解 avbot 最重要的子模块 libwebqq 请点开 libwebqq 目录查看其 README.md支持的系统cmake >= 3.0GCC 系centos >= 7ubuntu >= 14.04debian >= 7和其他一些 gcc >= 4.8 的系统。MSVC 系VisutalStudio 2013 (支持 Vista 以上系统)VisutalStudio 2013 - vc120_xp toolset (支持 Windows XP 以上系统)启用步骤cmake -G "VisualStudio 12 2013 Win64" -T "vc120_xp"icc 系icc >= 14clang 系clang >= 3.4编译注意事项请不要在源码文件夹里直接执行 cmake. 务必创建一个专用的文件夹存放编译中间文件,如建立个 build 文件夹。 然后在 build 文件夹里执行 cmake PATH_TO_AVBOT因为 cmake 有很多时候,需要删除 build 文件夹重新执行,而在源码内部直接 cmake ,则因为文件夹混乱,不好清除中间文件boost 相关boost 需要至少 1.57 版本。boost 请静态编译, gentoo 用户注意 USE=static-libs emerge boostwin 下, boost 请使用 link=static runtime-link=static 执行静态编译 (包括 mingw 下)。linux 下如果必须自己编译 boost 的话,请使用参数 link=static runtime-link=shared --layout=system variant=release --prefix=/usr 执行编译。link=static 表示编译为静态, runtime-link=static 则表示,应用程序最终会使用静态链接的 C 运行时。这个在 windows 平台是必须的要求。因为 VC 的 C 和 C 运行时打包起来非常麻烦。(mingw 的也一样)linux 那边 runtime-link=shared 表示使用动态链接的 libstdc .so, libstdc .so 无需静态链接,不是么 ;)添加 --layout=system variant=release 才能编译出 libbosot_context.a 这样的不带各种后缀的版本。MSVC 相关理论上 2012 版本也是支持的,不过没有测试过。cmake 生成好 VC 工程然后打开 avbot.sln 即可。如果 boost 在 c:/boost 则无需额外设置 如果不是,需要设定 BOOST_ROOT, 可以在 cmake-gui 里点 configure 按钮前,通过 "Add Enytry" 按钮添加。关于历史avbot 的历史剧烈膨胀, 达到 127MB 之巨, 已经严重影响到国内用户执行 git clone 了. 正好 avbot 经历了一次重构, 因此重构后 avbot 丢弃全部历史轻装上阵. 当然历史并非真的丢弃, 已经有一份完整的历史在 https://github.com/microcai/avbot 备份了.关于商业开发avbot 提供一份商业授权. 因为 avbot 对 XMPP 协议的支持是使用的 gloox, gloox 是个GPL授权的. 因此 xmpp 支持会被禁用. 除非你同时购买了 gloox 的商业授权.购买商业授权后, 您可以:1. 修改avbot的代码并无需公开自己的修改 2. 获得为期一年的技术支持 (可续) 3. 将 avbot 集成到自己的商业产品中 标签:avbot  聊天机器人  avplayer

24,855

社区成员

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

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