Articles of c + +

Linux的蓝牙l2ping信号强度(不连接?)

对于这里的任何Linux的BlueZ / BT专家: 我正在寻找一种方式来“知道”已知的BT设备(已知的BDADDR),如果他们在范围内,我想知道近似的信号强度。 我知道我可以先运行l2ping,然后build立到设备的连接,最后检查rssi或链接质量,如果连接没有先配对。 然而,我正在寻找的是一种获得信号强度的方式,而无需先连接到设备。 完美的是来自l2ping回复数据包的信号强度测量,但我不知道这个信息是否可用,并沿着堆栈传递。

将ASP.Net Web Forms项目部署到Fedora 24

这是我目前的设置: 我的本地计算机:这是我创build和编程我的ASP.Net WebForms项目与启用Cloudflare灵活SSL在Windows 10上使用visual studio 2015 professional。我也有团队资源pipe理器启用意味着我的项目同步到Github和我的所有文件也存储在我自己的存储库中。 我的服务器计算机:运行Fedora 24,我已经为ASP.Net安装了dotnet CLI(又名.Net Core), apache(httpd),nginx和Mono 。 我想部署/发布和托pipe我的webforms项目在这台计算机上的默认web目录(/ var / www / html / mysite /) 问题是,dotnet cli依赖于一个project.json并且与WebForms不兼容 。 .Net核心基本上不是一个选项 。 当我使用mod_mono时,如果在使用命令xsp4 –port 9000运行服务器的情况下连接到https:// localhost:9000 / ,则会出现Error 500 (请参见下文)。 我不能使用xsp4 –port 80或xsp4 –port 443因为它声称Address is already in use即使httpd是监听这些端口的唯一进程。 请注意,我可以使用 xbuild 命令 成功构build项目 。 我如何从github或我的本地计算机上取得我的项目并将其部署到我的服务器计算机上? 我错过了什么吗? 这里是我的虚拟主机configuration参考: httpd.conf 。 启动httpd.service时,我通常不会遇到任何错误。 […]

为共享库文件(* .so)生成头文件(* .h)

我有共享库文件( libmylib.so ),但没有头文件( mylib.h )。 你知道一些方法/工具从共享库文件生成这个头文件吗?

Linux上的C ++ makefile具有多个* .cpp文件

我正在尝试使用多个文件makefile。 有人能帮我吗? 我有的文件是file1.cpp,file2.h和main.cpp file1.cpp包含我的function。 file2.h包含我的函数的声明。 main.cpp [在代码中包含file2.h] file1.cpp [在代码中包含file2.h] 我做了 all: main gcc -g -Wall -o main main.cpp 但是当我尝试编译时,却给了我大量的错误。 我的代码在日食上工作得很好。

C ++链接器错误SDL图像 – 无法读取符号

我正在尝试使用SDL_Image库,并将.so添加到项目的链接库列表中(顺便说一句,我使用了Code :: Blocks)。 这样做后,当我去编译,我得到这个错误: Linking console executable: bin/Debug/ttfx /usr/lib32/libSDL_image-1.2.so: could not read symbols: File in wrong format 这是什么意思,我怎么得到它的工作? 编辑:我使用gcc。 谢谢!

OS X UDP发送错误:55没有可用的缓冲区空间

当我在OSX10.9.1上的python3.3中实现RUDP时,我注意到下面的代码实际上并没有做它在linux上的工作:(对于C,Java和C#/ Mono来说,哪种语言,同样的行为并不重要) from socket import * udp = socket(AF_INET, SOCK_DGRAM) udp.setsockopt(SOL_SOCKET, SO_REUSEADDR, True) udp.bind(('0.0.0.0', 1337)) udp.setblocking(False) udp.setsockopt(SOL_IP, IP_TTL, 4) udp.connect(('8.8.8.8', 12345)) buf = b'x' * 400 for _ in range(1024 * 1024 * 10): udp.send(buf) 这个代码只是写了很多udp包到8.8.8.8,这些包在4跳之后被丢弃,所以他们不应该到达目的地,只是模拟出站stream量。 问题: 这段代码会抛出一个OSError(55,'No buffer space available')错误,而在Linux(Windows)上,它会抛出一个BlockingIOError,这很好,因为它是一个非阻塞套接字。 所以,在Linux和Windows上,套接字在OSX上的行为是正确的,这是一个OSError,这是不好的。 但真正有趣的是,即使我把这个套接字置于阻塞模式下,这个代码仍然会在OSX上抛出一个错误。 而在Linux和Windows上,这不会引发任何错误,正如所料,它只是阻止。 这是基于BSD系统的实现细节吗? 或者我错过了一些重要的networking设置? [编辑] 我忘了提到我正在千兆局域网中testing这种行为。 我认为这是问题。 我连接到一个100mbit的networking,问题就没有了,即使使用300mbit的wlan,问题也没有发生。 现在我想这是连接到高速networking时的一些OSX特定行为。 [编辑 – 最后]我终于find原因: http://lists.freebsd.org/pipermail/freebsd-hackers/2004-January/005369.html […]

调用clock()时出现分段错误

我想了解使用下面的程序以编程方式caching的影响。 我正在与代码段错误。 我使用GDB(用-g -O0编译),发现它是分段错误 start = clock() (first occourance) 难道我做错了什么? 代码对我来说看起来很好。 有人能指出这个错误吗? #include <stdio.h> #include <sys/time.h> #include <time.h> #include <unistd.h> #define MAX_SIZE (16*1024*1024) int main() { clock_t start, end; double cpu_time; int i = 0; int arr[MAX_SIZE]; /* CPU clock ticks count start */ start = clock(); /* Loop 1 */ for (i = 0; […]

如何从Ocaml使用自己的共享库.so调用C ++代码?

我需要build立一个调用共享对象(Linux下的.so)的Ocaml / C ++模块, 只要编译一个简单的Ocaml / C ++存根就是一个问题,我pipe理这个东西,但是当我需要将.so和ocamlmklib或者ocamlopt连接起来的时候,它会失败 我在gcc 4.5下工作(c ++ 0x) 共享对象的文件: hello.hpp #include <iostream> #include <string> using namespace std; class HelloApplication { public : HelloApplication(); ~HelloApplication(); void say(string s); }; typedef HelloApplication *(*create_hello)(); hello.cpp: #include "hello.hpp" HelloApplication::HelloApplication(){} HelloApplication::~HelloApplication(){} void HelloApplication::say(string s) { cout << "Hello : " << s << endl; } extern […]

在C预处理器中避免双重macros观replace

这是一个简单的小C程序,让我困惑了一会儿: #include <stdio.h> #define STR1(x) #x #define STR(x) STR1(x) int main(void) { printf("%s\n", STR(MYDEF)); } 这只是使用标准的string化双定义技术将stringMYDEF #define的值打印出来。 使用gcc -DMYDEF=abc prog.c编译(在Linux上)运行结果,并不奇怪,它打印出'abc'。 但是改变gcc -DMYDEF=linux prog.c的值,打印的结果不是'linux',而是'1'。 所以这让我困惑了一下,但是当然是因为gcc(在Linux上)发现了一个名为'linux'的内置的#define,其值为'1',而STR(x)macros最后将MYDEF扩展为“linux”,然后将linux扩展为“1”。 在我真正的程序中(这比上面的小testing要复杂得多),我用一种不同的(可能更好的)方式来处理这个事情,但是这让我好奇……是否有一个简单的小macros技术可以避免这个双重replace,并使程序打印出'linux'? 我知道我可以添加一个-U或#undef的Linux,但是这感觉有点笨拙。 我以为所有内置的#define都以下划线(通常是双下划线)开头,但我猜不是。

RedHat Enterprise Linux 5.3以上不支持sem_timedwait?

我们在RedHat Enterprise Linux系统上看到了使用pthreads sem_timedwait的奇怪行为。 只有版本5.3以上才会出现。 当我们用sem_init在后台线程上创build信号量时,不会返回任何错误。 当我们执行sem_timedwait时,我们立即返回errno = 38(ENOSYS),表示不支持。 如果我们在主线程上做同样的事情,它会按预期工作,并且sem_timedwait没有错误。 我们在RHEL 5.2或之前没有看到它。 我们试着用gcc 3.2.3和4.1.2编译我们的代码,并得到相同的结果,所以它似乎是一个运行时问题。 所以,我的问题(最后;) 1)有没有人看过这个? 2)是RHEL 5.3以上的已知问题吗? 3)我们正在使用sem_timedwait睡一个单一的线程。 在Linux上有什么替代方法可以做同样的事情? 如果这是另一个问题的重复,请告诉我。 我看了,但找不到一个相同的问题,只是类似的OSX,这不是我们正在使用的。 谢谢,pxb 更新:刚刚做了更多的testing,结果如下: 如果我在RHEL5.4盒子(使用-L / usr / lib64和-lstdc ++ -lrt)上使用gcc 4.1.2进行64位构build,并在64位安装的RHEL5上运行, 如果我在RHEL5.1盒子(使用-L / usr / lib和-lstdc ++ -lrt)上使用gcc 4.1.2来构build32位版本,并在一个完全相同的64位RHEL5盒子上运行它,我们得到ENOSYS错误sem_timedwait 所以,看起来RHEL5.4(和看似RHEL5.3)上的64位和32位运行库是有区别的。 唯一的区别是32位和64位构build分别完成了RHEL5.1和RHEL5.4盒。