今天在编译组内代码时遇到了Find_package问题,具体来说就是找不到redis的库及相关头文件。
CMake Error at cmake/micros.cmake:75 (find_package):
By not providing "Findclass_loader.cmake" in CMAKE_MODULE_PATH this project
has asked CMake to find a package configuration file provided by
"class_loader", but CMake did not find one.
Could not find a package configuration file provided by "class_loader" with
any of the following names:
class_loaderConfig.cmake
class_loader-config.cmake
Add the installation prefix of "class_loader" to CMAKE_PREFIX_PATH or set
"class_loader_DIR" to a directory containing one of the above files. If
"class_loader" provides a separate development package or SDK, be sure it
has been installed.
针对上述问题,我们查找并安装了class_loader的开发库,上述问题就解决了。也就是
ok@u20:~/code/micros_information-dev_v2/build$ sudo apt-cache search class_loader
libclass-loader-dev - development files for Robot OS class_loader library
libclass-loader1d - ROS class_loader library
ok@u20:~/code/micros_information-dev_v2/build$ sudo apt-get install libclass-loader-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
apport-symptoms python3-systemd
使用'sudo apt autoremove'来卸载它(它们)。
将会同时安装下列软件:
xxxxxx
继续执行cmake,又出现了问题,找不到hiredis库
Could not find a package configuration file provided by "hiredis" with any
of the following names:
hiredisConfig.cmake
hiredis-config.cmake
Add the installation prefix of "hiredis" to CMAKE_PREFIX_PATH or set
"hiredis_DIR" to a directory containing one of the above files. If
"hiredis" provides a separate development package or SDK, be sure it has
been installed.
使用前面的方法,发现安装hiredis的开发库之后,仍然报错。
ok@u20:~/code/micros_information-dev_v2/build$ sudo apt-get install libhiredis-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
apport-symptoms python3-systemd
使用'sudo apt autoremove'来卸载它(它们)。
下列【新】软件包将被安装:
libhiredis-dev
xxxxx
然后使用whereis查找hiredis对应的头文件和库。分别在/usr/include/hiredis下面和/usr/lib/x86_64-linux-gnu下面。
ok@u20:/usr/include/hiredis$ ls
adapters alloc.h async.h hiredis.h read.h sds.h
ok@u20:/usr/lib/x86_64-linux-gnu$ ls libhi
libhiredis.a libhiredis.so.0.14 libhistory.so.8.0
libhiredis.so libhistory.so.8
于是决定重建hiredis对应的cmake文件,创建/usr/local/lib/cmake/hiredis/hiredisConfig.cmake文件,内容如下:
FIND_PATH(HIREDIS_INCLUDE_DIR hiredis.h
/usr/local/include
/usr/include
)
FIND_LIBRARY(HIREDIS_LIBRARIES NAMES HIREDIS
PATHS
/usr/local/lib
/usr/lib
/usr/lib/x86_64-linux-gnu
)
然后重新执行cmake,成功。
上述出现这些错误的原因是因为我们在CMakeLists.txt中使用了find_package操作
find_package(hiredis REQUIRED)
但是实际上libclass_loader.so和libhireids.so在相同目录下:
ok@u20:/usr/lib/x86_64-linux-gnu$ ls libcl
libclass_loader.so libclucene-shared.so.2.3.3.4
libclass_loader.so.0.4.1 libclutter-1.0.so.0
libclass_loader.so.1d libclutter-1.0.so.0.2600.4
libclucene-contribs-lib.so.1 libclutter-glx-1.0.so.0
libclucene-contribs-lib.so.2.3.3.4 libclutter-gst-3.0.so.0
libclucene-core.so.1 libclutter-gst-3.0.so.0.27.0
libclucene-core.so.2.3.3.4 libclutter-gtk-1.0.so.0
libclucene-shared.so.1 libclutter-gtk-1.0.so.0.800.4
但是为什么class_loader安装后就可以使用了,而hiredis不行呢?因为安装class_loader后,已经有了对应的cmake文件。使用模糊查找如下:
ok@u20:/$ sudo find / -iname "*loaderConfig.cmake"
find: ‘/run/user/1000/doc’: 权限不够
find: ‘/run/user/1000/gvfs’: 权限不够
find: ‘/run/user/125/gvfs’: 权限不够
/usr/share/class_loader/cmake/class_loaderConfig.cmake
而查找hiredis的cmake文件:
ok@u20:/$ sudo find / -iname "*redisConfig.cmake"
find: ‘/run/user/1000/doc’: 权限不够
find: ‘/run/user/1000/gvfs’: 权限不够
find: ‘/run/user/125/gvfs’: 权限不够
/usr/local/lib/cmake/hiredis/hiredisConfig.cmake
/usr/lib/cmake/Poco/PocoRedisConfig.cmake
/usr/lib/x86_64-linux-gnu/cmake/Hiredis/HiredisConfig.cmake
可以发现,实际上也是有的,只不过所在位置为/urs/local/x86_64-linux-gnu目录下,而这个目录估计不在Cmake的find_package的查找路径下。因此,针对hiredis这个配置,除了前面编写cmake文件外,也可以修改find_package的搜索路径。
首先,我们简单了解下Find_Package()的原理,它在搜索包时有两种模式:“Module(模块)”模式和“Config(配置)”模式。
在Module模式中,CMake会搜索所有名为Find<package>.cmake的文件,此文件的路径由安装CMake时指定的CMAKE_MODULE_PATH变量指定。如果找到了该文件,它会被CMAKE读取并进行处理,会生成以下相关变量:
// 是否发现该库
<LibaryName>_FOUND
// 头文件
<LibaryName>_INCLUDE_DIR or <LibaryName>_INCLUDES
// 库文件
<LibaryName>_LIBRARY or <LibaryName>_LIBRARIES
如果在Module模式中没有找到Find<package>.cmake文件,那么会进入Config模式,Cmake会搜索名为<package>Config.cmake与<package>-config.cmake文件,Cmake路径有很多,有兴趣的可以参考下CMake官方教程,这里提供一个常用路径:/usr/local/lib/cmake/xxx/。该配置文件中指定了依赖库的头文件、库文件地址。通过Config模式找到依赖库后,同样也是会生成库的相应变量,供调用者使用。如果没有找到该配置文件,可以自己创建一个,并不复杂。
对于Module模式,用户也可以自己编写对应的文件,方便自定义模块在Cmake中使用。具体可以参考:Cmake中find_package命令的搜索模式之模块模式(Module mode) - 简书 (jianshu.com)
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
由于fast-stemmer的问题,我很难安装我想要的任何rubygem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。
相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声
首先回顾一下拉格朗日定理的内容:函数f(x)是在闭区间[a,b]上连续、开区间(a,b)上可导的函数,那么至少存在一个,使得:通过这个表达式我们可以知道,f(x)是函数的主体,a和b可以看作是主体函数f(x)中所取的两个值。那么可以有, 也就意味着我们可以用来替换 这种替换可以用在求某些多项式差的极限中。方法: 外层函数f(x)是一致的,并且h(x)和g(x)是等价无穷小。此时,利用拉格朗日定理,将原式替换为 ,再进行求解,往往会省去复合函数求极限的很多麻烦。使用要注意:1.要先找到主体函数f(x),即外层函数必须相同。2.f(x)找到后,复合部分是等价无穷小。3.要满足作差的形式。如果是加