小编cel*_*vek的帖子

如何生成CMakeLists.txt?

我需要一些关于如何为CMake自动生成CMakeLists.txt文件的指针/建议.有谁知道任何现有的发电机?我检查了CMake Wiki中列出的那些,但不幸的是它们不适合我.

我已经有一个基本的Python脚本遍历我的项目的目录结构并生成所需的文件,但它现在真的"愚蠢".我想补充它,以考虑我正在构建的不同平台,我正在使用的编译器\交叉编译器或我可能具有的库依赖项的不同版本.我没有太多关于CMake的专家经验和一个我可以根据我的工作或已经工作的发电机的例子可能会有很大的帮助.

c c++ cmake

50
推荐指数
5
解决办法
8万
查看次数

GCC和MS编译器的模板实例化细节

任何人都可以提供比较或具体细节,说明在GCC和MS编译器中如何在编译和/或链接时处理模板实例化?这个过程在静态库,共享库和可执行文件的上下文中是不同的吗?我找到了关于GCC如何处理它的文档,但我不确定这些信息是否仍然指的是当前的状态.在编译我的库时,我应该使用他们建议的标志,例如-fno-implicit-templates吗?

我所知道的(可能不一定正确)是:

  • 模板将在实际使用时实例化
  • 模板将作为显式实例化的结果进行实例化
  • 重复实例化通常通过折叠重复实例化或通过延迟实例化直到链接时间来处理

c++ compiler-construction gcc templates visual-studio

44
推荐指数
1
解决办法
9184
查看次数

Android - 仅从本机代码写入/保存文件

我正在尝试构建一个利用NativeActivityNDK设施的Android应用程序.我有以下结构:

  • 安装了一堆本机共享库/system/vendor/<company>; 我正在使用自定义构建的Android映像,因此使用具有适当权限和所有内容的库是没有问题的
  • 使用它的几个应用程序NativeActivity依次依赖于上面提到的库

安装在/ system/vendor中的库和我的应用程序使用几个配置文件.使用标准C API读取它们没有问题 fopen/fclose.但是那些库和我的应用程序还需要存储一些文件作为其操作的结果,如配置,一些运行时参数,校准数据,日志文件等.随着文件的存储,有一个小问题因为我是不允许写入/system/vendor/...(因为"/ system/..."下的文件系统是以只读方式挂载的,我不想破解它).

那么创建和存储这些文件的最佳方式是什么?哪些是最符合"Android"存储区域的?

我一直在阅读android-ndk谷歌组中的几个主题,在这里提到内部应用程序私有存储外部SD卡,但由于我没有Android的扩展经验,我不知道是什么将是正确的方法.如果该方法涉及某些特定的Android API,那么C++中的一个小代码示例将非常有用; 我已经看过几个涉及Java和JNI的例子(例如在这个SO问题中),但我现在想远离它.从C++使用本机活动的internalDataPath/externalDataPath配对(一个使它们总是为NULL的错误)似乎也存在问题 .

android android-ndk

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

如何找出cl.exe的内置宏

有谁知道我怎么能找出cl.exe的内置/预定义宏?例如,对于gcc,以下命令行将列出所有编译器的内置宏

gcc -dM -E - </dev/null
Run Code Online (Sandbox Code Playgroud)

编辑:我对类似于gcc的方式感兴趣,就是"询问实际的编译器".

谢谢

c c++ macros visual-c++ cl

20
推荐指数
2
解决办法
4207
查看次数

Cortex A9 NEON与VFP使用混淆

我正在尝试为Cortex A9 ARM处理器(更具体的OMAP4)构建一个库,我对于哪些\何时在浮点运算和SIMD中使用NEON vs VFP有点困惑.需要注意的是,我知道2个硬件协处理器单元之间的区别(这也在SO上有所描述),我对它们的正确使用有一些误解.

与此相关我使用以下编译标志:

GCC
-O3 -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp
-O3 -mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=softfp
ARMCC
--cpu=Cortex-A9 --apcs=/softfp
--cpu=Cortex-A9 --fpu=VFPv3 --apcs=/softfp
Run Code Online (Sandbox Code Playgroud)

我已经阅读了ARM文档,很多wiki(比如这个),论坛和博客文章,每个人似乎都同意使用NEON比使用VFP或至少混合NEON更好(例如使用instrinsics来实现一些算法在SIMD中)和VFP并不是一个好主意; 如果这适用于整个application\library的上下文或仅适用于代码中的特定位置(函数),我还不是100%确定.

所以我在我的应用程序中使用neon作为FPU,因为我也想使用内在函数.结果我遇到了一些麻烦,我对如何在Cortex A9上最好地使用这些功能(NEON vs VFP)的困惑只是进一步深化而不是清理.我有一些代码为我的应用程序进行基准测试,并使用一些自定义的计时器类,其中计算基于双精度浮点.使用NEON作为FPU会产生完全不合适的结果(尝试打印这些值会导致打印主要是inf和NaN;相同的代码在为x86构建时没有任何障碍).所以我改变了我的计算以使用单精度浮点,据记载,NEON不处理双精度浮点.我的基准测试仍然没有给出正确的结果(最糟糕的是现在它在x86上不再起作用了;我认为这是因为精度的损失,但我不确定).所以我几乎完全迷失了:一方面我想使用NEON用于SIMD功能并使用它,因为FPU没有提供正确的结果,另一方面将它与VFP混合似乎不是一个好主意.在这方面的任何建议将不胜感激!!

我在上面提到的wiki的文章中找到了在NEON上下文中浮点优化应该做些什么的总结:

"

  • 仅使用单精度浮点
  • 当您发现瓶颈FP功能时,请使用NEON内在函数/ ASM.你可以比编译器做得更好.
  • 最小化条件分支
  • 启用RunFast模式

对于softfp:

  • 内联浮点代码(除非它非常大)
  • 通过指针而不是值传递FP参数,并在函数调用之间执行整数工作.

"

我不能用于浮动ABI,因为我无法链接到我可用的库.大多数的推荐对我来说都是有意义的(除了"快速模式",我不明白应该做什么以及此时我能做得比编译器更好的事实)但我不断得到不一致的结果和我现在不确定.

任何人都可以了解如何正确使用浮点和NEON用于Cortex A9/A8以及我应该使用哪些编译标志?

c c++ floating-point arm neon

20
推荐指数
2
解决办法
2万
查看次数

是"delete p; p = NULL(nullptr);" 反模式?

搜索SO上的内容,我偶然发现了这个问题,其中一条评论得到了最多投票的回答(对最多投票答案的第五条评论)表明这delete p; p = NULL;是一个反模式.我必须承认,我碰巧经常使用它,有时候大部分时间都用它来检查if (NULL != p).Man自己似乎在暗示它(请参阅destroy()函数示例),所以我真的很困惑为什么它可能是一个可怕的事情被认为是反模式.我使用它的原因如下:

  • 当我发布一个资源时,我也想让它无效以便进一步使用,而NULL是指示指针无效的正确工具
  • 我不想留下悬垂的指针
  • 我想避免双重\多个免费错误 - 删除一个NULL指针就像一个nop但删除一个悬空指针就像"射击你自己的脚"

请注意,我不是在"this"指针的上下文中提出这个问题,让我们假设我们不是生活在一个完美的C++世界中,并且遗留代码确实存在并且必须进行维护,所以请不要建议任何一种智能指针:).

c++

15
推荐指数
2
解决办法
1708
查看次数

NEON vs Intel SSE - 某些操作的等效性

我在查明几个英特尔SSE操作的NEON等效性时遇到了一些麻烦.看起来NEON不能同时处理整个Q寄存器(128位值数据类型).我没有在arm_neon.h头文件或NEON内在函数参考中找到任何内容.

我想做的是以下内容:

// Intel SSE
// shift the entire 128 bit value with 2 bytes to the right; this is done 
// without sign extension by shifting in zeros
__m128i val = _mm_srli_si128(vector_of_8_s16, 2);
// insert the least significant 16 bits of "some_16_bit_val"
// the whole thing in this case, into the selected 16 bit 
// integer of vector "val"(the 16 bit element with index 7 in this case)
val = _mm_insert_epi16(val, some_16_bit_val, 7);
Run Code Online (Sandbox Code Playgroud)

我已经看过NEON提供的转换操作,但找不到相同的方法来做上述事情(我对NEON没有多少经验).是否有可能做到以上(我想这是我只是不知道如何)?任何指针都非常感激.

c c++ sse simd neon

12
推荐指数
1
解决办法
4455
查看次数

Python sys.path修改不起作用

我正在尝试修改我的一个Python文件中的sys.path,以便在模块搜索路径中有一些特定的库dirs(它可能不是最好的方式,但是......).如果我在sys.path的前面插入几个路径,我的脚本没有考虑将来导入的路径.如果我创建一个包含我需要的库的全新列表并将该列表分配给sys.path,则会考虑这些导入.这是正确的行为吗?我正在使用python 2.5.4.这可能是我的环境可能导致这种行为吗?

一些代码片段:如果我这样做

pathtoInsert1 = " .... "
pathtoInsert2 = " .... "
sys.path.insert(0, pathToInsert1)
sys.path.insert(0, pathToInsert2)

pathList = [pathToInsert1, pathToInsert2] 
sys.path = pathList

pathtoInsert1 = " .... "
pathtoInsert2 = " .... "
sys.path.insert(0, pathToInsert1)
sys.path.insert(0, pathToInsert2)

有用.

谢谢

python path

9
推荐指数
2
解决办法
2万
查看次数

如何追踪SIGFPE/Arithmetic异常

我为在ARM CortexA9处理器上运行的Linux交叉编译了一个C++应用程序,该处理器因SIGFPE/Arithmetic异常而崩溃.最初我认为这是因为gcc 的-O3标志引入了一些优化,但后来我在调试模式下构建它仍然崩溃.

我使用gdb调试了应用程序,它捕获了异常,但不幸的是,触发异常的操作似乎也使堆栈无效,因此我无法获得有关该代码中导致这种情况发生的位置的任何详细信息.我最终得到的唯一细节是触发异常的操作(来自下面的堆栈跟踪):

    3 raise()  0x402720ac   
    2 __aeabi_uldivmod()  0x400bb0b8    
    1 __divsi3()  0x400b9880
Run Code Online (Sandbox Code Playgroud)

__aeabi_uldivmod() ,所以我尝试蛮力方法,并搜查了我的代码,因为它被证明是一项艰巨的任务,可能会使用操作,但没有取得多大成功的地方正在执行一个unsigned long长除法和提醒.此外,我试图通过零来检查潜在的划分,但再次检查代码库是否非常大并且检查每个除法操作这是一个麻烦且有些愚蠢的方法.所以必须有一个更聪明的方法来弄清楚发生了什么.

当调试器无法帮助时,是否有任何技术可以追踪此类异常的原因?

更新:在对十六进制数字进行处理,转储内存和进行堆栈取证之后(感谢Crashworks)我在ARM编译器文档中遇到了这个gem(即使我没有使用ARM Ltd.编译器):

通过重新实现适当的C库辅助函数,可以捕获并识别整数除零错误.除以零时的默认行为是,当使用信号函数或重新实现__rt_raise()或__aeabi_idiv0()时,调用__aeabi_idiv0().否则,除法函数返回零.__aeabi_idiv0()使用附加参数DIVBYZERO引发SIGFPE.

所以我在__aeabi_idiv0(_aeabi_ldiv0)et Voila上放了一个断点!在完全删除之前我有完整的堆栈跟踪.感谢大家提供的非常丰富的答案!

免责声明:"获胜"答案是单独和主观地选择考虑到其建议对我的调试工作的重量,因为不止一个是提供信息,真的很有帮助.

c++ linux embedded gcc arm

9
推荐指数
1
解决办法
9512
查看次数

在用C\C++编写的代码的上下文中的乱序与有序执行

谁能解释一下(用简单的英语)无序与有序执行?我正在阅读一些理论文本,我觉得我无法理解它.C\C++上下文中的一个小例子可能会有所帮助.有关多核处理器和多线程的特性有哪些?

c c++ cpu-architecture

9
推荐指数
2
解决办法
6147
查看次数