如何在 HP-Unix 中使用 STL(标准模板库)。如何编译和运行带有STL函数的程序?
我需要哪些工具或 IDE 才能开始在 Linux 上使用 C++ 开发软件?
我可以使用 C# 工作吗?
了解在 Linux 上开发软件的必要技能是什么?我的意思是公司主要需要在 Linux 上担任软件工程师吗?
当您SIGUSR1在程序执行时向程序发送信号(假设信号处理程序已预先设置)时sleep(100),信号会被正确捕获,但sleep(100)会在捕获后立即终止。这可能意味着发送信号可以强制终止内部某些功能。
例如,在一个科学计算程序中,我想捕捉SIGUSR1并打印进度。但是如果我碰巧在像has_error_occured = true或should_break_this_roop = true正在执行这样的语句时发送信号怎么办?我认为这可能会导致意外行为。
我怎样才能安全地使用SIGUSR1(和SIGUSR2)?众所周知,shell 命令dd在捕获SIGUSR1. 为什么这是安全的?
示例程序(我执行kill -SIGUSR1 xxxxx):
#include <iostream>
#include <csignal>
#include <unistd.h>
void my_handler(int signal) {
    ; //some instructions
}
void just_sleep() {
    std::cout << "sleep() starts.\n";
    sleep(100); //not wait for 100s if a signal caught
    std::cout << "sleep() ends.\n"; //executed even if a signal caught
}
int main() {
    signal(SIGUSR1, my_handler); …Run Code Online (Sandbox Code Playgroud) 我有一个装有 Debian 9.1 的 beaglebone black。我们为其 GPIO 编写了一个 c++ 程序,我们希望该程序在系统打开时始终运行。我们怎么做?
我有一个多线程的 C++ 程序。我相信如果我可以在通过交换机连接的其他计算机上运行它,吞吐量会增加。所有这些都使用相同的操作系统(Ubuntu)。有什么方法可以在不更改代码的情况下做到这一点吗?如果我需要更改代码,我应该寻找什么?
我已经为我的编译命令安装gdb并添加了-g选项,但是当我尝试(gdb) s或(gdb) n它说:
程序没有运行。
它仅在我尝试(gdb) r去并停止我的程序由于错误而停止的地方时才有效(我可以gdb在没有命令行的情况下看到这一点)。
我应该如何逐行跟踪我的代码?
尝试运行命令gcc code.cpp -o runthis
但是它给了我这种格式的错误:
/usr/bin/ld: /tmp/cco6J3Vh.o: warning: relocation against `_ZSt4cout' in read-only section `.text'
/usr/bin/ld: /tmp/cco6J3Vh.o: in function `main':
code.cpp:(.text+0x28): undefined reference to `std::cout'
/usr/bin/ld: code.cpp:(.text+0x30): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/usr/bin/ld: code.cpp:(.text+0x3e): undefined reference to `std::cin'
/usr/bin/ld: code.cpp:(.text+0x46): undefined reference to `std::istream::operator>>(int&)'
/usr/bin/ld: code.cpp:(.text+0x9e): undefined reference to `std::cout'
/usr/bin/ld: code.cpp:(.text+0xa6): undefined reference to `std::ostream::operator<<(int)'
/usr/bin/ld: code.cpp:(.text+0xbb): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)' …Run Code Online (Sandbox Code Playgroud) 我有理由不想依赖特定的构建系统。我并不是要否定任何人的最爱,但我真的只想坚持编译器附带的内容。在这种情况下,GCC。Automake 有一定的兼容性问题,尤其是在 Windows 上。<3 GNU make 是如此有限以至于它经常需要用 shell 脚本来补充。Shell 脚本可以有多种形式,长话短说,可能会激怒很多人,这就是我想要做的——
主要的切入点是上帝。无论是 C 还是 C++ 源文件,它都是应用程序的中心。我不仅希望主入口点是第一个被执行的东西,我还希望它是第一个被编译的东西。让我解释 -
曾经有一段时间,专有库和闭源库很常见。多亏了苹果转向 Unix 和微软在脚下开枪,那个时代结束了。任何需要动态链接的库都可以作为应用程序的支持文件包含在内。出于这个原因,单独的 .SOs(可能还有 .DLLs ;])的构建指令都很好而且很花哨,因为它们是单独的可执行文件。任何其他库都应该静态链接。现在,让我们谈谈静态链接——
静态链接是一个真正的婊子。这就是 makefile 的用途。如果整个项目是用一种语言编写的(例如 C 或 C++),您可以将库作为头文件#include。那很好。但是现在,让我们考虑另一种情况——
假设你和我一样,无法找出 C 对字符串的困难借口,所以你决定使用 C++。但是您想使用 C 库,例如 MiniBasic。上帝帮助我们。如果 C 库的设计不符合 C++ 的语法,那你就完蛋了。这就是 makefile 出现的时候,因为您需要使用 C 编译器编译 C 源文件,并使用 C++ 编译器编译 C++ 源文件。我不想使用makefile。
我希望有一种方法可以利用 GCC 的预处理器宏来告诉它如下内容:
嗨,海合会。你好吗?如果您忘记了,您现在正在查看的这个源文件是用 C++ 编写的。你当然应该用 G++ 编译它。这个文件需要另一个文件,但它是用 C 编写的。它被称为“locats.c”。我想让你用 GCC 把那个编译成一个目标文件,我想让你用 G++ 把这个编译成主目标文件,然后我想让你把它们链接成一个可执行文件。
我怎么能用预处理器行话写这样的东西?海湾合作委员会甚至这样做吗?
我编写了一个 C++ 看门狗,它运行一组脚本来确定该系统是否存在问题。
代码有点啰嗦,这里就不展示了,不过相当于一个系统调用如下:
int const r(system("/bin/sh /path/to/script/test-health"));
Run Code Online (Sandbox Code Playgroud)
只有,r当脚本因if语句中缺少命令而失败时为 0 。脚本中有一个令人反感的地方:
set -e
[...]
if unknown_command arg1 arg2
then
[...]
Run Code Online (Sandbox Code Playgroud)
将unknown_command明显失败,因为......它是未知的。那时脚本结束,因为我set -e在开头有 。
但是,在这种情况下,退出代码将为 0。
在这种情况下,有没有办法让我获得退出代码 1?
即问题是检测错误而不必添加测试来知道是否unknown_command存在。我知道该怎么做:
if ! test -x unknown_command
then
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)
我的观点是,当我编写该脚本时,我希望unknown_command在我自己安装它时存在,但是如果出现问题或有人将脚本复制到另一个系统上而没有安装所有内容,我想知道我在执行脚本。
我想在 Linux 上使用 C++14 的新特性。哪个免费编译器授予这些功能?
长话短说:
程序同时启动两次时会抽取相同的随机种子。它是怎么发生的?
细节
我正在运行 MCMC 统计分析,因此我执行程序 (phylobayes) 两次以获得2 个独立的重复。
为此,我的 shell 脚本分离每个复制运行,如下所示(示意性地):
pb -d "inputdata" "replicate1" &
pid1=$!
pb -d "inputdata" "replicate2" &
pid2=$!
wait "$pid1"
wait "$pid2"
Run Code Online (Sandbox Code Playgroud)
(然后,使用 slurm 将这个脚本提交到计算集群(Debian 10))sbatch。
但我的许多运行(例如 30%)都是从相同的随机种子开始的!如日志文件所示。
Phylobayes使用 C++Random::initRandom()命令。[编辑:实际上,正如指出的那样,该函数在包内有一个自定义定义]。
从技术上讲,是否可以采用相同的随机种子?它使用 /dev/random 还是 /dev/urandom ?
sleep如果是,我将在开始之间插入一个命令;
如果没有,我必须明白我犯了什么愚蠢的错误,但我不知道它会是什么......
是什么之间的差异#include "file.h"和#include <file.h>?当然,它们的意思完全相同,因为我有一个文件,其中包含以下内容:
#include <file1.h>
#include <file2.h>
#include "file3.h"
#include "file3.h"
Run Code Online (Sandbox Code Playgroud) 我想知道是否有办法编译 C、C++ 和 Python 代码,以便无法在 Linux 上对其进行逆向工程?
我听说在 Windows 上有一些方法可以做到这一点,但我正在使用 Linux。
我想安全地编译我的代码,如已发布或最终版本。
更新
至少我想让普通用户很难拆卸,
我在 C 和 C++ 中使用 GCC,如果你向我介绍最好的 Python 编译器,我将不胜感激。