在共享库中分配给外部
我正在构建一个用户定义的外壳,用户可以在其中动态地将新插件加载到外壳中. 在我的一些共享库中,我使用关键字 extern 来引用全局变量,例如下面的插件 extern char *prompt; int setprompt(char *argv[]) { prompt = argv[1]; return 0; } 只是,当我执行我的 shell 程序(链接这个库)时,我得到了错误 ./setprompt.so: undefined symbol: prompt 为什么我不能给全局变量赋值? 这是来自 shell 代码的代码,其中包含提示的定义 char *builtin_functions[64] = { "comment", "setprompt", "cd", "bgjobs", "fg", "loadpluggin", "culater" }; char *prompt = "upsh"; void *pointers_to_functi
154 2022-07-19
编程技术问答社区
使用gcc修改内存中的下一条指令
我想在获取之前修改下一条指令,最好的答案是 this question 在 foo 函数中,*p 指向 main 函数中的下一条指令.我想修改 *p 指向的内容.例如,我想将下一条指令更改为跳转指令.我该怎么做? void foo(){void** p = search((void**)&p, __builtin_return_address(0));//修改*p指向的内容.}int main(){富();//下一条指令.*p 点这里return 0;} 我想在 intel Core-i7 3632QM 处理器上使用 gcc 编译器来执行此操作. 解决方案 可能你不能:大多数代码驻留在标记为“可执行文件"或“只读"并尝试更改它们通常会导致访问冲突错误. 更重要的是,为什么? 自我修改代码通常表明您做了非常非常错误的事情,并且往往导致的问题多于解决的问题.
116 2022-07-19
编程技术问答社区
如何使用gcc获取C/C++源文件的函数名和行号
这里是一个c/c++的项目源代码文件夹,我想写一个小而快的工具/脚本来获取所有源文件的文件名、行号和函数名. 例如,我希望它输出如下: ./src/a.c 第 1500 行调用 func1();./src/a.c 第1600行调用func1(); ./src/a.c 第 1700 行调用 func2();./src/b.c 第 1700 行调用 func3(); ... 例如,这里是tmp.c的上下文,我想让它分析文件, #include #include int main (){ char dest1[4]; char dest2[4]; char *src="Sample string"; strcpy (dest2,strcpy(dest1,src)); printf ("src1: %s\ndest
428 2022-07-19
编程技术问答社区
我在哪里搞砸了?在USART中使用环形/环形缓冲区
这是我之前帖子的缩小范围.我正在尝试使用一些在 USART 中实现环形缓冲区的函数.它们在头文件中定义. http://www.fourwalledcubicle.com/files/LightweightRingBuff.h[^] 我试图在 main.c 中使用这些函数,但我想在某个地方我搞砸了一些指针/char/uint8_t 类型.简而言之,我已经将此代码编程到我的微控制器中,但在发送“ABC"后似乎没有收到任何回复 你能发现我使用字符/指针的方式有什么可疑之处吗?让我知道是否需要澄清. RingBuffer_InitBuffer(&Buffer);char 持有者;//如果某个键被按下,则处理它if(usart_kbhit()) {持有人 = usart_getchar();if (!RingBuffer_IsFull(&Buffer)){RingBuffer_Insert(&Buffer, holder);}if (holder == 'C') {uint16_
158 2022-07-19
编程技术问答社区
gcc将int*转换为enum*错误
#include typedef 枚举{red=1,blue,green}颜色;void set_color(color *c){*c = 蓝色;}int main(){//int a = 3;//set_color(&a);//为什么会出现这个错误?//set_color((color *)(&a));//没错颜色 c = 红色;set_color(&c);//这是对的;return 0;} 我用 gcc -S 用 set_color((color *)(&a)) 来查看汇编语言,和 set_color(&c) 一样,但是为什么 gcc 不自动进行转换呢? 解决方案 因为你定义了一个类型.因此隐式类型转换将不起作用.请参阅:http://en.cppreference.com/w/cpp/language/implicit_cast[ 当你写 set_color(&a); 这可能是一个错误——你可能没有意识到“a"根本不是一种颜色.因此它会引发错误,因此您
114 2022-07-19
编程技术问答社区
共享内存shmget和shmat
我使用 创建了 4 个共享内存段shmid=shmget(key+sdz, shmSize, 0664); 和 shmat(shmid, CurAddr,SHM_RND); CurAddr 通过更改不同段的 shmSize 的偏移量来更新. 段已成功创建,通过 ipcs 检查,客户端也成功附加到共享 mem 段但读取的数据为(null)并且客户端终止 给出分段错误.((null) 与字符串进行比较) 解决方案
146 2022-07-19
编程技术问答社区
收到h文件和。c文件在不同的文件夹中编译?
我在 include 文件夹中有一个名为 hello.h 的 .h 文件,在 lib 文件夹中有一个名为 hello.c 的 .c 文件,它是 hello.h 中函数的定义,在另一个名为 main 的文件夹中有一个 .c 文件.c 调用 hello.h 中的函数来做某事.如何在 GCC 编译器下将 hello.h、hello.c 和 main.c 文件编译在一起? 解决方案 请参阅我对问题的评论,然后,这个:http://gcc.gnu.org/onlinedocs/[^]. —SA
488 2022-07-19
编程技术问答社区
如何制作。等等。来自的dll。使用gcc或g的cpp++
您好,我有一个初学者问题,如何在 Linux 中从 .cpp 制作 .so 和 .dll? 我有一个简单的项目没有线程,2个.h文件,2个.cpp文件. 解决方案 在Linux下你通常要制作.so文件(Linux 不能消耗 Windows DLLs). 您可以在此处找到指南:“Linux 共享库简介(如何创建共享库)"[^].
388 2022-07-19
编程技术问答社区
为什么我会出现分段错误(内核转储)
各位,这里有什么问题吗? #include stdio.h>int main(){char *s,i;printf("输入一个字符串:");scanf("%s",s);for(i=0; s[i]!='\0'; ++i);printf("字符串长度:%d \n",i);return 0;} 输出:输入一个字符串:jeevan 字符串长度:6 Segmentation fault (core dumped) 解决方案 char *s; 不会为 scanf 读取分配任何内存-它只是声明一个指针-因此您需要使用(例如) s = malloc(100); 为 99 个字符的字符串(加上终止的 nul)获得足够的空间 iirc 那么问题是,你如何确保你的用户输入的字符不超过 99 个?- 答案是,像这样使用 scanf,你不能 - 它的“危险" [编辑] 我看到有关 scanf 的说明符的讨论,暗示使用“%ms"获取 scanf 为您分配内存,但是,我无法证明这种使用形
218 2022-07-19
编程技术问答社区
我如何在不使用括号的情况下编写程序
使用gcc,如何编写程序打印“hello"而不使用括号('','()','{}'). Thx. 解决方案 你不能那样做.C++ 不允许.考虑任何其他不使用这些括号的编程语言.试试汇编语言.
140 2022-07-19
编程技术问答社区
SetCursorPos和mouse_事件没有焦点?
你好, 请原谅我的英语水平不好,我是法国学生 我开发了一个 c++ 应用程序,用于在应用程序的按钮上自动移动和 clic,我的光标不支持命令行,但仅支持 GUI. 使用 windows.h,我对此进行了测试: SetCursorPos(X,Y); Sleep(500); Mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); Sleep(500); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); 我的控制台应用程序的这段代码只有在前台(集中)时才有效 所以如果我的控制台应用程序没有焦点,我的鼠标就不能移动.. 你有解决这个问题的办法吗? 最好的问候 Sébastien FAVIER 解决方案 鼠标与焦点无关.使用函数SendInput: https://msdn.microsoft.com/en-us/library/windows/desktop/ms646310
182 2022-07-19
编程技术问答社区
ubuntu命令行环境中的操作系统开发
我有一个项目要求我使用 ubuntu 终端命令行从另一个进程停止给定进程.我不知道从哪里开始请帮助 解决方案 在终端中,输入“man kill". 它不会杀死男人和女人;). 输入 ''q'' 退出 man. 希望这会有所帮助, 巴勃罗.
274 2022-07-19
编程技术问答社区
在Ubuntu上运行应用程序而不使用';sudo#39;命令
我为 Ubuntu 创建了一个应用程序,它从串口读取数据并保存到文件中.但是当我运行无法运行的应用程序时.一项权限被拒绝问题.当我使用 sudo ./AppName 从终端运行然后输入密码时,这是有效的. 如何在不使用 sudo 命令的情况下运行和工作. 我的要求是通过从 shell 脚本调用它来将其用作守护程序 解决方案 您可以简单地为用户提供所需的权限.试试这个: usermod -a -G dialout MY_USER_NAME 祝你好运!
406 2022-07-19
编程技术问答社区
疑问:如何在代码块C++中自定义调试选项,以及调试时需要考虑哪些事项
您好,我想问一些与 GCC/G++ 的 Codeblocks IDE 相关的问题: 1)我想知道是否有任何好的教程或网络解释如何利用 gcc 的调试选项.我的意思是,我的意图是,当我使用“调试"构建而不是“发布"构建时,例如,我希望通过控制台向我显示 cout 或我在代码中放置的其他函数调用. 但是当我想以“发布"模式构建时,我不想编译该代码.有没有办法实现我的意思?我知道有,因为我在其他地方看到它或者它已经被评论了. 2)调试时我还应该考虑哪些其他事项?比如在c++中调试相关的类?还是第三方库? 谢谢. 解决方案 参见 http://www.gnu.org/software/gdb/[^].
166 2022-07-19
编程技术问答社区
C代码有问题。。。。。。。。救命啊!
我正在用 C 开发一个简单的程序, 但是我遇到了一个问题: 我的代码: #includestdio.h>int main(){int menuinpt;printf("欢迎来到C游戏!!!!\n");printf("1. 玩游戏\n");读:printf("输入命令开始:");scanf("%d", &menuinpt);if (menuinpt != 1){goto 阅读;}if (menuinpt == 1){char * 名称;printf("Hello Dude!看来你要玩这个游戏\n");printf("我是你这个游戏的向导理查德.\n");printf("现在你得告诉我你的名字\n>");scanf("%d", &name);printf("好吧,你的名字是 %d", name);获取字符();}} 我正在使用 GCC(Code:Blocks) 来编译它,但是每当我输入“Sid"时,它都会说: 你的名字是 48 而不是“你的名字是席德" 我该如何解决这个问题?
152 2022-07-19
编程技术问答社区
ISO C++2011标准的编译器和库支持
我正在尝试使用带有 rpi-hw 库的 Qt creator 在树莓派(debian wheezy)中创建 i2c 通信.我在我的 linux 系统中成功编译并安装了 rpi-hw 库.但是当我尝试将其包含在我的 Qt 中时.出现以下错误. /usr/include/c++/4.7/bits/c++0x_warning.h:32: error: #error 此文件需要编译器和库支持 ISO C++ 2011 标准.此支持目前是实验性的,必须使用 -std=c++11 或 -std=gnu++11 编译器选项启用. /usr/include/rpi-hw.hpp:159:在/usr/include/rpi-hw.hpp:159:0 包含的文件中, /home/pi/untitled/main.cpp:2: 来自 ../untitled/main.cpp:2: /usr/include/rpi-hw/types.hpp:32: 错误: 'std::int8_t' 尚未声明 /
344 2022-07-19
编程技术问答社区
我能从拆卸中知道地址吗
大家好,我使用 g cc.我想知道每一行代码的地址,有没有反汇编的方法?disassemble 输出的第一列对我来说似乎是地址,但我不确定.#include #include 主函数(){字符名称[20],地址[500];printf("请输入您的姓名::: \n");fgets(名称,sizeof(名称),标准输入);printf("你输入的名字是:: %s \n", name);printf("请输入您的姓名::: \n");fgets(地址,sizeof(地址),标准输入);printf("你输入的地址是:: %s \n", address);}对于上面的例子,我想知道每一行的地址. 解决方案 一段代码的地址通常是由链接器决定的,而不是编译器.您在汇编代码列表中看到的是一个过程相对地址.链接器将组合来自各种编译单元的代码,然后构造可执行文件或 dll.并且即使在加载 dll 的那一刻,如果与其他 dll 存在冲突,它也可能会被重新定位到不同
142 2022-07-19
编程技术问答社区
特征向量,特征值不动点计算(C)
** 已编辑 ** 我尝试使用 libfixmath 将提到的 Jacobi 算法更改为定点,但我没有得到正确的结果.我错过了什么?? 编辑雅可比码 makefile ****************************** 第一篇文章 ************************************************ C新手在这里.我不知何故让自己陷入了深渊,我找不到出路.如果你能帮忙就太好了! 情况:我正在尝试在 C 中实现 ICA 算法.我使用浮点算法(双精度、浮点数)来实现.现在我希望这段代码将其转换为定点,这样我就可以将其导入 32 位 ARM 微控制器(这就是为什么我不能使用双精度、浮点等). 我找到了四个我认为可以帮助我的库: http://sourceforge.net/projects/avrfix/files/ http://www.dsprelated.com/showcode/40.php ht
252 2022-07-19
编程技术问答社区
在C语言中对正规变量使用类型修饰符(近、远、大)
我将类型修饰符(far,near,huge) 与普通变量而不是指针一起使用,发现这些指针类型修饰符仅适用于全局普通变量,但与块本地变量一起使用时会产生错误. int near a,far b,huge c; int main() { int d,e,f; printf("\n address of a=%u ,b=%u ,c=%u ,d=%u ,e=%u ,f=%u",&a,&b,&c,&d,&e,&f); return 0; } 为什么允许使用全局变量而不是局部变量.此外,变量最终会变成什么,即它变成一个指针,一个更大范围的整数或完全是别的东西. 问题已经在 stackoverflow 我尝试过的: int near a,far b,huge c; int main() { int d,e,f; // int near a,far b,,huge c;
118 2022-07-19
编程技术问答社区
对数字进行排序。
我需要编写一个程序来对命令行参数(数字)进行排序. 我尝试过的: #include #include int main(int argc, char *argv[]) { int i, j, t, n, pos, a[100]; n = argc - 1; printf("\nNumber of elements in the input array is : %d\n", n); printf("\nThe input array is\n\t"); for (i = 1; i a[j]) { pos
240 2022-07-19
编程技术问答社区