Tag: 链接器

链接器错误内联函数

我有一些编译器/链接器错误,我不知道什么是正确的方法来继续。 我遇到这种情况: 啊:在这个文件中定义了一个声明为“inline”的函数,例如:inline void foo1(); bh:在这个文件中定义了一个声明为“inline”的函数,它调用foo1():inline void foo2(); main.c:foo1和foo2()都有一些函数调用。 现在,如果我在ah和bh中声明foo1和foo2作为extern inline void我得到以下错误: prj / src / bo:在函数foo1′: (.text+0x0): multiple definition of :(。text + 0x0):foo1’prj / src / main.o :(。text + 0x0)的foo1′: (.text+0x0): multiple definition of :这里首先定义make: * [kernel]错误1 在我描述的情况下,允许编译和链接而没有错误/警告的方式是什么?

IAR为自定义数据定义内存区域

我想在STM32 micro中定义一个特定的内存区域来存储一些字符串。 我正在使用IAR编译器,但我找不到一个简单的例子,它可以帮助我使用icf文件以正确的方式创建区域。 如何创建区域并在代码中使用此区域? 谢谢

是否可以成功包装退出方法?

我目前正在使用gcc 4.1.2并且我有一个用例,我想使用链接器选项来包装exit方法。 让我们立即抛开所有典型的回答/评论,“为什么你甚至想要那样做?” 我想知道的是,甚至可以做到这一点。 我之前使用链接器包装了其他方法,没有任何问题。 下面是我正在使用的__wrap_exit函数的快速示例: void __wrap_exit(int _status) { return; } 当调用exit时,确实调用了这个包装器。 但是,程序在__wrap_exit返回后立即遇到分段错误。 即使没有调用真正的退出函数并且只有包装器版本,gcc会在幕后做一些事情,例如在调用exit时发出信号吗? 可以提供幕后发生的一些细节吗?

我是否需要明确包含共享库中使用的公共头文件(在包含路径文件夹中)?

我正在使用共享库,比如shr.so 这有一些头文件,比如shr_struct.h ,我需要在我的程序中使用的结构,比如shr_struct.h 。 我是否需要在include路径中保留shr_struct.h的副本, shr_struct.h在shr_struct.h中的shr_struct.h中声明结构类型的对象?

在Xcode 5中的osx 10.9上使用Portaudio – 架构x86_64的未定义符号

我试图在Xcode 5中使用OSX 10.9上的Portaudio,但遇到了一些问题。 我已经下载了源码,rand ./configure和make,在我的xcode项目中包含了include文件夹,并运行了Pa_Initialize()来获取此错误。 我已经尝试将xcode构建设置中的体系结构从“标准体系结构(64位Intel)(x86_64)”设置为“Universal(32/64位Intel)(x86_64,i386)”,但没有成功。 我已经按照这里和这里的说明/解决方案,但还没有找到解决方案。 有没有人让这个lib在xcode 5中工作? 我不是在C中链接库的最有经验的人,所以任何帮助都会受到赞赏。

从OpenSSL-1.0.1r中删除OPENSSL_cleanse

我发现OPENSSL_cleanse在我的项目中浪费了很多时间。 例如,如果它运行25秒,则OPENSSL_cleanse会浪费3秒 。 我检查了这个函数的代码,并确定它没有对我做任何非常有用的事情。 我知道它出于安全原因用垃圾数据填充内存,但我并不真正关心它。 所以我决定return; 就在此函数的任何操作开始之前。 void OPENSSL_cleanse(void *ptr, size_t len) { return; // original OpenSSL code goes here } 我正在使用Mac OS和Xcode。 我编译了lib并通过Configure脚本的–openssldir选项将其安装在/Users/ForceBru/Desktop/openssl 。 我已经在Build Settings->Link Binary With Libraries中将它添加到我的项目中,并在Build Settings->Search Paths->Header Search Paths和Build Settings->Search Paths->Library Search Paths添加了dirs。 该项目编译得很好,但时间分析器仍显示对OPENSSL_cleanse相当昂贵的调用。 编辑: C标签是因为OpenSSL是用C++编写的,而C++标签是因为我的代码是用C ++编写的。 也许这些信息会有所帮助。 问题是,我做错了什么? 如何删除对OPENSSL_cleanse的调用? 我认为这与链接有关,因为命令行包含-lcrypto ,这意味着这个库实际上可以从任何地方获取(对吗?),而不一定来自/Users/ForceBru/Desktop/openssl 。 编辑#2:我编辑了链接器选项以使用/Users/ForceBru/Desktop/openssl的.a文件,并将其从Build Settings->Link Binary With Libraries删除。 仍然没有效果。

Android NDK链接问题

我用NDK编译了Sox等人。 所以,我有所有Android友好的共享库。 我做了一个调用sox函数的简单测试文件 。 NDK构建告诉我: undefined reference to `sox_open_read’ sox_open_read在sox.h中定义。 我知道它找到了sox.h,因为它给了我一个关于该文件的警告: In file included from (…)/sox/sox.h:19 所以也许它想在实际的libsox.so中找到sox_open_read。 好吧,我已经尝试了大约100种不同的方法来告诉它sox共享库的位置 LOCAL_SHARED_LIBRARY := sox LOCAL_LDLIBS := -L$(LOCAL_PATH_FULL)/jni/libs/libsox.so 但是,如果我将Sox指定为静态库,它将起作用: #LOCAL_SHARED_LIBRARY := sox LOCAL_STATIC_LIBRARIES := sox LOCAL_LDLIBS := -L$(LOCAL_PATH_FULL)/jni/libs/libsox.so 这是我的理解,我不想静态链接到sox库 – 我想动态链接到它。

使用curses.h从键盘获取char

我正在尝试使用curses.h从键盘获取一个字符。 这是我的源码(get_char_example.c): #include #include int main(void) { char ch; printf(“Enter a character: “); ch = getch(); printf(“\nIts ASCII code is %d\n”, ch); return 0; } 我使用以下命令编译: gcc get_char_example.c -o get_char_example 我收到以下错误: /tmp/ccjaXwRU.o:在函数`main’中: get_char_example.c:(.text+0x1c): undefined reference to `stdscr’ get_char_example.c:(.text+0x24): undefined reference to `wgetch’ collect2: error: ld returned 1 exit status 使用:gcc(GCC)7.2.0 Arch Linux 4.13.9-1-ARCH 提前致谢!

C Makefile链接器错误 –

我在下面写了Makefile。 我在编译期间收到以下错误。 我不确定IBS是什么? 它是否缺少LIBS的L或其他东西? 关注问题: 这是目录结构。 . ├── Makefile └── src ├── include │ └── utils.h ├── main.c └── utils.c 但是,当我运行make时,这是输出。 它似乎没有拿起并构建文件utils.c ? cc -I./src -I./src/include -I / usr / local / include / upm -MMD -MP -c src / main.c -o build /./ src / main.coo TARGET_EXEC ?= app.out BUILD_DIR ?= ./build SRC_DIRS ?= […]

嵌入Python 3.3

我尝试嵌入Python 3.3,如此处所述。 我在使用Python 2.7的MacOS 10.8上,所以我从python.org下载了3.3版的二进制发行版。 从它我得到了所有标题和“Python”,我重命名为“python33”所以它不会与安装的“Python”lib发生冲突。 我把所有东西放到一个文件夹中 embed.c / include python33 “文件python33”说: python33 (for architecture i386): Mach-O dynamically linked shared library i386 python33 (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64 和embed.c是: #include int main(int argc, char *argv[]) { Py_Initialize(); PyRun_SimpleString(“print ‘test’\n”); Py_Finalize(); return 0; } 但是当我做“gcc embed.c -I./include -L.-lpython33”时,它打破了: ld: library not […]