这是否意味着我的发行版坏了(它是我正在使用的板的自定义发行版,很容易出错)?我可以调整这种行为吗?
user907323's questions
我正在尝试编译以下 foo.c:
#include <systemd/sd-journal.h>
int main(int argc, char *argv[]) {
sd_journal_print(LOG_NOTICE, "Hello World");
return 0;
}
和
gcc `pkg-config --cflags --libs libsystemd` foo.c
得到一个 ld 错误:
undefined reference to 'sd_journal_print_with_location'
当我运行nm /lib/x86_64-linux-gnu/libsystemd.so.0.14.0
我认为应该包含这个和其他 sd_ 函数定义的库时,我得到:没有符号。(与其他符号列表实用程序的结果相同)。
没有符号的共享库?
我在 Ubuntu 16.04 上,用 apt 安装了 libsystemd-dev。一些来源引用 libsystemd-journal-dev,但我不相信它存在于我的发行版中。
我要做的就是弄清楚如何使用 systemd 的日志进行系统范围的日志记录。我知道我可能可以使用 syslog,它会在幕后使用 systemd,但更愿意了解这里发生了什么。
我正在将我的代码作为 deb 包(使用 cmake 构建,使用 CpackDeb 打包)构建并分发到基于 Ubuntucore 的 16.04 LTS。该软件包安装了一个配置文件。在更新期间,我无法让 apt/apt-get 保留旧的配置文件。它在所有测试用例中默默地覆盖旧配置,无论它是否已被编辑。我尝试过的事情:
$ apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install <package>
$ export DEBIAN_FRONTEND=noninteractive ; apt-get install -y -o Dpkg::Options::="--force-confold" <package>
和一些变化。结果总是一样的——旧配置文件的静默覆盖。apt 版本是 1.2.31,我在 arm64 处理器上。
也许我没有正确包装 deb?我的配置文件只是一个可安装的。我不知道对配置文件有什么特殊要求,有吗?
我需要将 IO 引脚值与从用户空间写入串行端口同步(因为我还不能从内核空间做到这一点 - 请参阅我的另一个问题)。我的代码(省略错误检查)如下:
char buf[3] = {'U','U','U'};
int fd = open("/dev/ttyS1", O_RDWR | O_NOCTTY); // supposed to be blocking
// fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) & ~O_NONBLOCK); <-- makes no difference
FILE *f = fopen("/sys/class/gpio/gpio200/value", "w"); // the relevant IO
// set IO
fprintf(f, "1");
fflush(f);
// send data
write(fd, buf, sizeof(buf));
// unset IO
fprintf(f, "0");
fflush(f);
行为是 IO 在写入开始时快速切换到 1 并返回。换句话说,write()
在数据实际传输到网络之前很久就返回了。
这里有希望吗?