我编写了一个简单的c ++程序,它使用boost,我希望在具有任何linux风格(暂时)的相同架构的机器上部署,可能安装或不安装某些增强版本.我是部署新手但尝试阅读文档并想出一个CMakeLists.txt,它看起来像:
cmake_minimum_required(VERSION 2.8)
project( myprog )
FIND_PACKAGE( Boost 1.50 COMPONENTS thread system chrono program_options REQUIRED )
INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} )
add_executable( myprog myprog.cpp )
target_link_libraries( myprog -lpthread -lboost_system -lboost_chrono -lboost_program_options )
INSTALL( TARGETS myprog DESTINATION . )
SET( CPACK_GENERATOR "TGZ")
INCLUDE( CPack )
Run Code Online (Sandbox Code Playgroud)
所有编译和运行都很好,但打包(make package)只包装可执行文件而不是依赖的boost库".so"
当我运行:ldd myprog它告诉我它取决于:linux-vdso.so,libpthread.so,libboost_system.so,libboost_chrono.so,libboost_program_options.so libstdc ++.so libgcc_s.so libc.so librt.so libm.so
这些是我想要打包的共享库(也许我不需要打包标准库)
如何告诉cmake获取正确的共享对象库,并将它们放在可执行文件旁边,这样用户只需要解压缩文件夹并启动可执行文件而不进行任何安装?
静态链接不是一个选项,因为我将有一堆可执行文件将使用相同的boost库,并且可能还存在一些与libgcc静态链接的许可证问题.
在索引结构的核心,我发现自己想知道是否可以针对以下问题进行优化:
我有一个大的(几GB的RAM)小结构数组(在RAM中),我有一个较小的索引数组(大约10e4元素).指数几乎随机分布.我有一个无关紧要的函数(对于数学家来说是"关联的"),比如说"sum".
我想在小数组中指定的索引处聚集从大数组中检索到的值.
目前我花了大部分时间从内存中取出(因为索引是随机扩展的,并且表很大,有很多缓存未命中,但是因为我对索引有所了解,所以应该有一些预取可用).我发现很难分析是否正在进行一些预取优化,或者我可以从这样的优化中获得多少加速?
所以我的问题是,从已知内存位置获取的最快方法是什么.是否有一些黑暗艺术编程魔术呢?是否有一些特定于架构/平台的方法?我正在寻找c ++或c#解决方案.