小编Kam*_*ath的帖子

如何从目录而不是符号链接复制内容?

在目录上cp -rvf dir .复制符号链接而不是实际内容.src被复制到module/hal/

.
|-- comm
|   `-- alchemist.c
|-- module
|   `-- hal
|       `-- src
|           `-- comm -> ../comm
`-- src
    `-- comm -> ../comm
Run Code Online (Sandbox Code Playgroud)

linux

38
推荐指数
1
解决办法
5万
查看次数

如何撤消中间文件删除

我有一个软件堆栈,可以创建一些中间文件作为构建过程的一部分.出现了一些问题,构建中断了.我想看看那些中间生成的文件.令我惊讶的是,这些文件正在作为构建过程的一部分被删除.

Removing intermediate files...
rm fact_test_without_proxies.c fact_test_main.c fact_test_without_proxies.o
Run Code Online (Sandbox Code Playgroud)

我浏览了Makefiles我没有看到删除它们的任何明确规则.可以有任何隐式规则来删除中间文件.如果是,我如何禁用这些隐式规则?

Removing intermediate files...只有在使用--debug选项执行make时才会看到打印.

skmt@tux:~/coding/factorial/ut$ make --debug
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-pc-linux-gnu
Reading makefiles...
Updating goal targets....
 File `check' does not exist.
   File `test_dept_run' does not exist.
     File `fact_test' does not exist.
       File `fact_using_proxies.o' does …
Run Code Online (Sandbox Code Playgroud)

makefile

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

基于模板的C/C++代码生成

有关C/C++模板基本代码生成器的任何建议,专门用于生成重复代码生成?(不是基于UML/MATLAB模型或其他高级的东西).对于这个领域的新手任何好的通用教程(不是基于工具)?

我遇到了GNU Autogen看起来不错,但看起来它需要一个陡峭的学习曲线.我更喜欢一些像Eclipse这样的eclipse插件,易于使用,最重要的是很好的教程.

c code-generation

19
推荐指数
1
解决办法
3万
查看次数

在运行时替换动态共享库

我需要在程序的执行周期中使用不同的动态库.看着dlfcn.h我认为这是可能的.我承认没有阅读很多关于动态库加载的文献.

好的,这就是我做的 -

  • 我创建了名为`libdynamicTest.so.1`的共享库
  • 主APP开启此solib(dlopen),获取函数指针(dlsym),运行它然后将其关闭(dlclose)

一切都很好,直到这里.

  • 现在假设我用另一个libdynamicTest.so.1替换了我的libdynamicTest.so.1(一些代码差异)我看到了一个Segmentation错误.此外,我确保在dlclose之后和dlopen之前更换solib .

有人可以解释为什么这个分段错误?

我注意到即使我删除libdynamicTest.so.1程序仍然执行,安静奇怪.

    SysTrace(("opening dynamic library"));
    handle = dlopen("libdynamicTest.so.1",RTLD_LAZY);
    fn     = dlsym (handle,"dylib_print_msg");
    SysTrace(("Using dynamic library"));
    if(!fn)
    {
        printf("unknown dylib_print_msg..!!\n");
    }
    else
    {
        (*fn)();
    }
    ret = dlclose(handle);
    SysTrace(("closed dynamic library status = [%s]", (ret==0?"OK":"NOK")));
Run Code Online (Sandbox Code Playgroud)

PS我不是试图修改任何现有程序的行为,也不构成任何威胁.我正在进行可行性检查以将集成测试作为共享库运行.


编辑

我尝试使用gdb,以下是堆栈跟踪,当发生故障时.

Program received signal SIGSEGV, Segmentation fault.
0x0000003e92408b7b in check_match.8509 () from /lib64/ld-linux-x86-64.so.2
#0  0x0000003e92408b7b in check_match.8509 ()
   from /lib64/ld-linux-x86-64.so.2
#1  0x0000003e92409024 in do_lookup_x …
Run Code Online (Sandbox Code Playgroud)

c linux shared-libraries

14
推荐指数
1
解决办法
7886
查看次数

在C中运行时模拟?

这已经在我的列表中待了很长时间.简而言之 - 我需要mocked_dummy()dummy() ON RUN-TIME的位置运行,而无需修改factorial().我不关心软件的切入点.我可以添加任意数量的附加功能(但不能修改其中的代码/*---- do not modify ----*/).

我为什么需要这个?
对一些传统C模块进行单元测试.我知道有很多可用的工具,但如果可以运行时模拟我可以改变我的UT方法(添加可重用的组件)让我的生活更轻松:).

平台/环境?
Linux,ARM,gcc.

我正在尝试的方法?

  • 我知道GDB使用陷阱/非法指令来添加断点(gdb内部).
  • 使代码可自行修改.
  • dummy()用非法指令替换代码段,并作为紧接的下一条指令返回.
  • 控制转移到陷阱处理程序.
  • 陷阱处理程序是一个可重用的函数,它从unix域套接字读取.
  • mocked_dummy()传递函数的地址(从映射文件中读取).
  • 模拟函数执行.

从这里开始存在问题.我还发现这种方法很繁琐,需要大量的编码,有些也在组装中.

我还发现,在gcc下,每个函数调用都可以被挂钩/检测,但同样不是很有用,因为该函数是用来模拟的,无论如何都会被执行.

我还能使用其他方法吗?

#include <stdio.h>
#include <stdlib.h>

void mocked_dummy(void)
{
    printf("__%s__()\n",__func__);
}

/*---- do not modify ----*/
void dummy(void)
{
    printf("__%s__()\n",__func__);
}

int factorial(int num) 
{
    int                      fact = 1;
    printf("__%s__()\n",__func__);
    while (num > 1)
    {
        fact *= num;
        num--;
    } …
Run Code Online (Sandbox Code Playgroud)

c gdb arm mocking

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

基于时间戳的grep文件

这应该很简单,但我不知道它.我在Linux下拥有超过4GB的大型代码库.在构建期间生成一些头文件和xml文件(使用gnu make).如果重要,头文件是基于xml文件生成的.

我想在头文件中搜索一个关键字,该关键字是在时间实例(我的开始编译时间)之后最后修改的,以及类似的xml文件,但是单独的grep查询.

如果我在所有可能的头文件或xml文件上运行它,则需要花费很多时间.只有那些自动生成的.此外,搜索必须是递归的,因为有很多目录和子目录.

linux ubuntu grep

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

提高构建速度的提示

有没有办法让软件构建/编译更快?我们有一个构建树c,c ++使用makefile,接近2小时进行新构建.我遇到过几个商业解决方案,比如ElectricAccelerator,Sparkbuild,有没有相应的开源资源?

makefile build gnu-make

8
推荐指数
3
解决办法
5711
查看次数

如何管理 yocto 项目的元层并在 git 中构建配置

我正在尝试找出基于 yocto 的项目的工作流程。目前,我已经为我拉取的每个元层创建了一个带有子模块的 git。https://github.com/shrkamat/rpi/tree/thud

这意味着当我转移到新的 yocto 版本(比如战士)时,我需要创建新的 git 分支并移动所有子模块以跟踪新的租赁分支。有没有更好的方法,这里有什么最佳实践吗?

yocto

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

gcc,未初始化的全局变量

有没有办法知道/警告全局变量是否未使用gcc初始化?

我得到了本地/原子变量"-Wuninitialized"

c gcc

7
推荐指数
2
解决办法
4721
查看次数

可以使用模板进行保守吗?

我正在尝试制作一些 consteval 函数的模板化版本,我不清楚这里是否有任何限制。

template <typename T>
consteval T max(const T& a, const T& b) {
    return (a > b) ? a : b;
}

template <typename T>
consteval T mid(const T& a, const T& b, const T& c) {
    T m = max(max(a, b), c);

    if (m == a)
        return max(b, c);
    if (m == b)
        return max(a, c);

    return max(a, b);
}

consteval int imax(const int& a, const int& b) {
    return (a > b) ? a : b; …
Run Code Online (Sandbox Code Playgroud)

c++ c++20

6
推荐指数
1
解决办法
324
查看次数

标签 统计

c ×4

linux ×3

makefile ×2

arm ×1

build ×1

c++ ×1

c++20 ×1

code-generation ×1

gcc ×1

gdb ×1

gnu-make ×1

grep ×1

mocking ×1

shared-libraries ×1

ubuntu ×1

yocto ×1