小编Ale*_*x F的帖子

两个编译器的一个makefile

我有两个makefile,用于本机和交叉编译.它们之间唯一的区别是编译器名称:

# makefile
CC = g++
...
# makefile-cc
CC = arm-linux-gnueabihf-g++
...

为了进行本机编译,我执行make,进行交叉编译,我执行make -f makefile-cc.我希望有一个makefile,应该使用make本机编译执行,并make cross进行交叉编译.这样做的正确语法是什么,例如:

# makefile (C-like pseudo-code)
if cross
    CC = arm-linux-gnueabihf-g++
else
    CC = g++

c c++ g++ cross-compiling gnu-make

11
推荐指数
2
解决办法
4262
查看次数

unique_ptr operator =

std::unique_ptr<int> ptr;
ptr = new int[3];                // error
Run Code Online (Sandbox Code Playgroud)
error C2679: binary '=' : no operator found which takes a right-hand operand of type 'int *' (or there is no acceptable conversion)

为什么这不编译?如何将本机指针附加到现有的unique_ptr实例?

c++ smart-pointers visual-studio-2010 c++11

10
推荐指数
1
解决办法
9896
查看次数

需要跨设备的gdb

我在Ubuntu 12.04上安装了gcc-arm-linux-gnueabihf交叉编译器,现在我可以为嵌入式设备构建一个程序.我在哪里可以找到交叉gdb进行调试?

gcc-arm-linux-gnueabihf引用包含相关包列表中的gdb-arm-linux-gnueabihf,它似乎是我正在寻找的调试器.但是这个套餐不可用.

gdb embedded-linux

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

std :: endl和variadic模板

码:

#include <iostream>

void out()
{
}

template<typename T, typename... Args>
void out(T value, Args... args)
{
    std::cout << value;
    out(args...);
}

int main()
{
    out("12345", "  ", 5, "\n"); // OK
    out(std::endl);              // compilation error
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

构建错误:

g++ -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -pthread -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.cpp"
../main.cpp: In function ‘int main()’:
../main.cpp:17:15: error: no matching function for call to ‘out(<unresolved overloaded function type>)’
../main.cpp:17:15: note: candidates are:
../main.cpp:3:6: note: void out() …
Run Code Online (Sandbox Code Playgroud)

c++ variadic-templates c++11

10
推荐指数
1
解决办法
525
查看次数

更改屏幕方向后,TextView内容将丢失

观察我在Android模拟器中的应用程序行为,我发现在更改屏幕方向后会保留EditText内容(Ctrl + F11).但TextView内容重置为其初始值,并不保留程序设置的最新信息.根据定义,这种行为?我该怎么做才能保留这些内容?

lifecycle android

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

静态EventHandler事件的发件人

我有静态EventHandler事件的类:

public static event EventHandler MyEvent;

static void RaiseEvent()
{
    EventHandler p = MyEvent;

    if (p != null)
    {
        p(null, EventArgs.Empty);
    }
}
Run Code Online (Sandbox Code Playgroud)

由于我没有任何this可以用作事件发送者的对象,所以我提出了这个事件sender = null.根据.NET编程指南,将此参数设置为null是否可以?如果没有,我可以将哪个对象用作发件人?

.net c# events

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

函数模板的显式特化会导致链接器错误

Functions.h:

#pragma once
#include <iostream>

template<class T> void TemplatedFunction(T* p) {}

template<> void TemplatedFunction<float>(float* p) {}

template<> void TemplatedFunction<char>(char* p) {}
Run Code Online (Sandbox Code Playgroud)

Functions.cpp:

#include "Functions.h"

void Test()
{
    TemplatedFunction<float>(NULL);
    TemplatedFunction<char>(NULL);
}
Run Code Online (Sandbox Code Playgroud)

main.cpp中:

#include "Functions.h"
void Test();

int main()
{
    Test();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

构建错误:

main.obj : error LNK2005: "void __cdecl TemplatedFunction<float>(float *)" (??$TemplatedFunction@M@@YAXPAM@Z) already defined in Functions.obj
main.obj : error LNK2005: "void __cdecl TemplatedFunction<char>(char *)" (??$TemplatedFunction@D@@YAXPAD@Z) already defined in Functions.obj
Run Code Online (Sandbox Code Playgroud)

我知道有两种解决方法:

  1. 不要将Functions.h包含在几个.cpp文件中 - 如果h文件包含许多.cpp文件中需要的一些其他定义,则不能在复杂项目中应用.

  2. 将所有模板化函数声明为static.但这意味着专用函数出现在包含Functions.h的所有.cpp文件中,即使它们未被使用,也可能导致代码重复.

所以,我看到专门的模板化函数表现得像非模板化函数.是否还有其他解决方案可以在没有static声明的情 如果声明了函数 …

c++ templates template-specialization

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

GLIBCXX_3.4.26 未找到在 BeagleBone 上运行交叉编译的程序

我有以下程序:

#include <iostream>
#include <sstream>
using namespace std;

int main()
{
    //ostringstream s;
    cout << "cpp test" << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我使用交叉编译器在 Ububtu 20.04 桌面上构建它:

arm-linux-gnueabihf-g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/cpp_test.d" -MT"src/cpp_test.o" -o "src/cpp_test.o" "../src/cpp_test.cpp"
arm-linux-gnueabihf-g++  -o "cpp_test"  ./src/cpp_test.o
Run Code Online (Sandbox Code Playgroud)

然后我复制cpp_test到 BeagleBone Black Wireless 板并执行它:

debian@beaglebone:~/c$ ./cpp_test 
cpp test
debian@beaglebone:~/c$ ldd cpp_test
    linux-vdso.so.1 (0xbee85000)
    libstdc++.so.6 => /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 (0xb6ea1000)
    libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0xb6e78000)
    libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6d7e000)
    libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0xb6d03000)
    /lib/ld-linux-armhf.so.3 (0xb6fbe000)
Run Code Online (Sandbox Code Playgroud)

现在我取消注释该行ostringstream s; …

c++ linux cross-compiling embedded-linux beagleboneblack

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

Unix和FreeBSD

我的最终目标是编写可以在Unix操作系统上运行的程序.我知道有很多Unix版本,现在还不知道我需要支持哪一个.我现在无法安装任何Unix操作系统.我唯一能做的就是尽可能使用接近Unix的免费操作系统.FreeBSD是一个不错的选择吗?我知道还有OpenBSD,可能还有别的东西.

附加信息:编程语言是C++,我使用的是GCC,还有一些可移植的库:Boost和wxWidgets.

unix freebsd

8
推荐指数
2
解决办法
963
查看次数

快速修复NetworkOnMainThreadException

我需要执行第三方开源程序,它抛出NetworkOnMainThreadException.根据SDK参考,仅针对Honeycomb SDK或更高版本的应用程序进行此操作.针对早期SDK版本的应用程序可以在其主要事件循环线程上进行联网.

在第一阶段,我只想运行程序,而不更改源.所以,我改变了AndroidManifesr.xml中的行:

    android:targetSdkVersion="15"

至:

    android:targetSdkVersion="10"

但是,这没有用,程序仍然会抛出NetworkOnMainThreadException.我怎样才能使这个工作?我正在尝试在Android Emulation Google API上执行该程序(级别16).

android network-programming networkonmainthread

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