小编gna*_*117的帖子

在Mac上构建Google测试时链接错误(命令行)

我目前正在尝试构建一些使用Google C++ Test框架的测试代码,但我不断收到错误消息

ld:警告:在/usr/local/lib/libgtest.dylib中,文件是为不支持的文件格式构建的,而不是被链接的体系结构(i386)

我试图让问题尽可能简单:

我有一个主要功能cmtest.cc

#include <gtest/gtest.h>

/** Main entry point */
int main(int argc, char**argv, char**envArg)
{
    testing::InitGoogleTest(&argc, argv);
    return(RUN_ALL_TESTS());
}
Run Code Online (Sandbox Code Playgroud)

真正基本的测试代码CrazyTest.cc

#include <gtest/gtest.h>
TEST(CrazyTest, one) {
    EXPECT_EQ(2, 2);
}
Run Code Online (Sandbox Code Playgroud)

我使用以下命令来构建gtest和我的测试代码.

g++ -o CrazyTest.o -c -Wall -Werror=non-virtual-dtor -pipe -std=c++98 -fno-rtti -fno-exceptions -fno-strict-aliasing -Wno-deprecated -g -arch i386 -arch x86_64 -mmacosx-version-min=10.5.4 -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_HAS_RTTI=0 -I/opt/gtest-1.6.0/include CrazyTest.cc

g++ -o cmtest.o -c -Wall -Werror=non-virtual-dtor -pipe -std=c++98 -fno-rtti -fno-exceptions -fno-strict-aliasing -Wno-deprecated -g -arch i386 -arch x86_64 -mmacosx-version-min=10.5.4 -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_HAS_RTTI=0 -I/opt/gtest-1.6.0/include cmtest.cc

g++ -o gtest-all.o …
Run Code Online (Sandbox Code Playgroud)

c++ testing linker build googletest

13
推荐指数
2
解决办法
8673
查看次数

在stderr的Windows上更改文本输出颜色

我最近发现了一个帖子给出了一个解决方案,让stderr的文本输出为Linux(bash)的不同颜色

他们创建了以下bash脚本脚本

#!/bin/bash
{ $* 2>&1>&3|sed 's,.*,\x1B[33m&\x1B[0m,'>&2;} 3>&1
Run Code Online (Sandbox Code Playgroud)

这会导致输出在来自stderr时打印黄色文本.stdout仍然打印相同的颜色.

该脚本保存在名为color的$ PATH目录中.这允许我使用make或scons运行脚本,并且它将以黄色显示来自stderr的所有文本.(可以通过将33米改为31米来使文字变红)

color make CPU=x64 
Run Code Online (Sandbox Code Playgroud)

这对于在编译时发现错误非常有用.

是否有类似的脚本可用于Windows cmd shell?

注意:如果有帮助,我已经在我的Windows计算机上安装了sed.

windows cmd stderr building

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

我在哪里可以找到与proguard相关的Android构建选项的文档

我一直在使用android构建系统做很多工作,我遇到了一个情况,即proguard正在删除导致NoClassDefFoundError的必需类.我可以告诉班级没有被发现但是我花了一段时间才发现proguard弄乱了用我的代码构建的类.

我终于发现我可以通过添加LOCAL_PROGUARD_ENABLED := disabled到Android.mk文件来防止proguard运行.

我只能做到这一点,因为我碰巧偶然遇到了同样的Android.mk文件.

我无法找到以下任何文档

LOCAL_PROGUARD_FLAGS
LOCAL_PROGUARD_ENABLED
LOCAL_PROGUARD_FLAG_FILES
Run Code Online (Sandbox Code Playgroud)

最好我可以告诉我们的典型用法LOCAL_PROGUARD_FLAGS是识别proguard配置文件的位置,如下所示:

LOCAL_PROGUARD_FLAGS := -include $(LOCAL_PATH)/proguard.flags
Run Code Online (Sandbox Code Playgroud)

问题是我无法弄清楚它与LOCAL_PROGUARD_FLAG_FILES使用的有何不同如下:

LOCAL_PROGUARD_FLAG_FILES := proguard.flags
Run Code Online (Sandbox Code Playgroud)

LOCAL_PROGUARD_ENABLED可用于禁用的ProGuard但是比其他disabled的选择我不知道还有什么可以与此选项一起使用.

LOCAL_PROGUARD_ENABLED := disabled
Run Code Online (Sandbox Code Playgroud)

有谁知道我在哪里可以找到这些构建选项的文档(官方或非官方)?谷歌似乎没有返回任何有用的搜索.

android build-process build proguard

5
推荐指数
1
解决办法
4225
查看次数

使用 p/invoke 将字符串数组从 C# 编组到 C 代码

我需要将 C# 字符串数组传递到 C 代码中

示例 C 代码

void print_string_array(const char** str_array, int length){
    for (int i = 0; i < length; ++i) {
        printf("Sting[%l] = %s\n", i, str_array[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过的 C#(这不起作用)

string foo[] = {"testing", "one", "two", "three"};  
print_string_array(foo, foo.Length);

[DllImport(my_C_dll, CharSet = CharSet.Ansi)]
private static extern void print_string_array([In][MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.LPStr)] string[] sa, int length);
Run Code Online (Sandbox Code Playgroud)

因 System.AccessViolationException 失败 System.AccessViolationException:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。

我也试过(这也不起作用)

string[] foo = {"testing", "one", "two", "three"};  
IntPtr[] s_array = new IntPtr[foo.Length];

for(int i = 0; i < foo.Length; …
Run Code Online (Sandbox Code Playgroud)

.net c++ pinvoke interop marshalling

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