小编mr *_*mpy的帖子

cmake,print compile/link命令

有人可以告诉我,CMake的命令行标志可能会打印出它执行的所有编译/链接命令吗?

我在文档中的任何地方都找不到这个.我生命中的许多小时都消失了.我只想验证它正在做我认为的事情,(然后完全放弃地狱构建系统并用GNU Makefile替换它).谢谢!

makefile cmake

41
推荐指数
1
解决办法
3万
查看次数

dlopen有两个共享库,导出符号

我有一个linux共享库foo.so,它是使用可执行文件加载的dlopen("foo.so", RTLD_NOW | RTLD_LOCAL).从foo.so我想dlopen另一个库bar.so,它引用foo.so中定义的符号,但链接器无法找到它们.我无法将RTLD_LOCAL更改为RTLD_GLOBAL,因为我没有执行加载的可执行文件的源代码.我-Wl,--export-dynamic想当链接foo.so可能会有所帮助,但它不会覆盖本地标志到dlopen.GCC的新属性可见性功能看起来并不像它提供了答案.

有没有办法可以指示链接器解析bar.so中未定义符号的引用到foo.so中的那些定义,没有链接bar与-lfoo或相似性将符号移动到第3个库并将foo和bar链接到它?对我来说唯一的事情就是从foo.so本身中删除foo.so和RTLD_GLOBAL,然后dlopen bar.so,但这让我感到有点混乱.谢谢.

linux shared-libraries dlopen

8
推荐指数
1
解决办法
2424
查看次数

将纯虚拟更改为虚拟并保持二进制兼容

我是否可以将纯虚函数(在基类中)更改为非纯函数而不会遇到任何二进制兼容性问题?(Linux,GCC 4.1)

谢谢

c++ pure-virtual binary-compatibility

8
推荐指数
1
解决办法
296
查看次数

boost pool_alloc

为什么boost :: fast_pool_allocator建立在单例池之上,而不是每个分配器实例的单独池?或者换句话说,为什么只提供它,而不是每个分配器有一个池的选项?会有这个坏主意吗?

我有一个内部使用大约10种不同的boost :: unordered_map类型的类.如果我使用了std :: allocator,那么当它调用delete时,所有内存都将返回系统,而现在我必须在许多不同的分配器类型上调用release_memory.滚动我自己的使用pool而不是singleton_pool的分配器会不会很愚蠢?

谢谢

c++ singleton boost pool

6
推荐指数
1
解决办法
1253
查看次数

计算几何,四面体符号体积

我不确定这是否是正确的地方,但是这里......

简短版本:我正在尝试计算平面上三角形的方向,由三条边的交点形成,而不显式计算交点.

长版:我需要在3D三角形上对三角形上的PSLG进行三角测量.PSLG的顶点由线段与穿过三角形的平面的交点定义,并保证位于三角形内.假设我有交点,我可以投影到2D并使用点线侧(或三角形有符号区域)测试来确定任意3个交叉点之间的三角形的方向.

问题是我无法明确计算交点,因为当我找到线平面交点时会累积浮点误差.为了弄清楚线段是否在第一个位置撞击三角形,我使用了一些可自由使用的强大几何谓词,它给出了四面体体积的符号,或等效于点位于平面的哪一侧.我可以确定线段端点是否在通过三角形的平面的相对侧,然后在线段和三角形的每个边之间形成四面体以确定交叉点是否位于三角形内.

由于我无法明确计算交叉点,我想知道是否有一种方法可以仅使用原始点在3D中表达相同的2D方向计算.如果有三条边撞击三角形,总共给我9分.假设我所要求的甚至是可能的(仅使用3D方向测试),那么我猜我需要在这9个点之间形成所有可能的四面体的一些子集.我甚至难以想象这一点,更不用说将其提炼成公式或代码了.我甚至不能谷歌,因为我不知道这类问题的行业标准术语是什么.

任何想法如何处理这个?谢谢.也许我应该问MathOverflow ......

编辑:在阅读了一些评论之后,我发生了一件事......也许如果我能在3个线段之间拟合非重叠的四面体,那么任何一个穿越平面的方向都将是答案我我正在寻找.除了边缘包围一个简单的三角形棱镜,我不确定这个子问题是否也可以解决.

编辑:请求的图像. 替代文字

math geometry

6
推荐指数
1
解决办法
1544
查看次数

与MSVC x64相比

我正在将一些代码移植到Windows(叹息)并需要使用fesetround.MSVC不支持C99,因此对于x86,我从MinGW复制了一个实现,并将其破解为:

 //__asm__ volatile ("fnstcw %0;": "=m" (_cw));
 __asm { fnstcw _cw }
 _cw &= ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO);
 _cw |= mode;
 //__asm__ volatile ("fldcw %0;" : : "m" (_cw));
 __asm { fldcw _cw }
 if (has_sse) {
  unsigned int _mxcsr;
  //__asm__ volatile ("stmxcsr %0" : "=m" (_mxcsr));
  __asm { stmxcsr _mxcsr }
  _mxcsr &= ~ 0x6000;
  _mxcsr |= (mode <<  __MXCSR_ROUND_FLAG_SHIFT);
  //__asm__ volatile ("ldmxcsr %0" : : "m" (_mxcsr));
  __asm { ldmxcsr _mxcsr }
 }
Run Code Online (Sandbox Code Playgroud)

评论的行是gcc的原件; msvc取消注释.这似乎有效. …

floating-point 64-bit visual-c++

2
推荐指数
1
解决办法
1261
查看次数