我目前正在尝试构建一些使用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) 我最近发现了一个帖子给出了一个解决方案,让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.
我一直在使用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)
有谁知道我在哪里可以找到这些构建选项的文档(官方或非官方)?谷歌似乎没有返回任何有用的搜索.
我需要将 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)