Tag: 链接器

如何将自定义C(它本身需要特殊的链接选项进行编译)与Cython链接?

所以我正在尝试创建一个使用我编写的.c文件的Cython模块。 该.c文件需要一个特殊的链接选项(要编译它,我需​​要gcc -o mycode mycode.c -lfftw3f )。 我可能只是在Cython中重写我的.c文件,但我想知道如何做到这一点。 我正在使用fftw3,并且在编译时,如果你想使用浮点版本,你需要在.c文件中使用-lfftw3f选项#include 。 我的setup.py如下所示: from distutils.core import setup from distutils.extension import Extension from Cython.Distutils import build_ext sourcefiles = [‘mycode_caller.pyx’, ‘mycode.c’] ext_modules = [Extension(“myext”, sourcefiles, libraries=[‘fttw3f’])] setup( name = ‘My Extension’, cmdclass = {‘build_ext’: build_ext}, ext_modules = ext_modules ) 我创建了一个名为mycode.h的头文件,如下所示,并包含transform()函数的原型,该函数在mycode.c定义: #include #include #ifndef FOURIER_H_INCLUDED #define FOURIER_H_INCLUDED fftwf_complex** transform(float** in, […]

嵌入Python2和Python3解释器,选择在运行时使用哪一个

有没有一种方法可以将Python2和Python3解释器嵌入到C程序中,然后在运行时决定运行其中一个或另一个? 这是一个示例尝试: Makefile文件: all: main main: main.c librun_in_py2.so librun_in_py3.so g++ main.c -lrun_in_py2 -lrun_in_py3 -L. -Wl,-rpath -Wl,$$ORIGIN -o main librun_in_py2.so: run_in_py2.c g++ $$(python2.7-config –cflags –ldflags) -shared -fPIC $< -o $@ librun_in_py3.so: run_in_py3.c g++ $$(python3.4-config –cflags –ldflags) -shared -fPIC $< -o $@ clean: @-rm main *.so main.c中 void run_in_py2(const char* const str); void run_in_py3(const char* const str); […]

链接c项目时,体系结构x86_64的未定义符号

我尝试将picoc项目编译成xcode。 没有外部库,只是我在命令行工具C项目中导入的.c和.h文件。 所有.c文件编译都没有问题,但是当XCode链接时,我收到以下消息: Undefined symbols for architecture x86_64: “_BasicIOInit”, referenced from: _PicocInitialise in platform.o “_CStdOut”, referenced from: _PrintSourceTextErrorLine in platform.o _PlatformVPrintf in platform.o “_MathFunctions”, referenced from: _IncludeInit in include.o “_MathSetupFunc”, referenced from: _IncludeInit in include.o “_PicocPlatformScanFile”, referenced from: _IncludeFile in include.o … 给出错误的命令如下: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -v -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ MacOSX10.8.sdk -L / Users / laurent […]

无法使用clang编译和链接程序

我最近在Ubuntu系统上编译了Clang 2.9(来自这里 )。 我在编译和链接一个简单的程序时遇到了麻烦。 有谁知道如何解决这一问题? 这是我看到的输出: a@ubuntu:~/Desktop$ clang add.c /usr/bin/ld: 1: Syntax error: word unexpected (expecting “)”) clang: error: linker command failed with exit code 2 (use -v to see invocation) uname -a输出 Linux ubuntu 2.6.38-8-generic #42-Ubuntu SMP Mon Apr 11 03:31:50 UTC 2011 i686 i686 i386 GNU/Linux gcc -v输出: Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5.2/lto-wrapper […]

CMOCKA / Linker:’包装’很多function

我最近遇到了用于C的’ cmocka ‘模拟库。我能够模拟单个函数并成功测试调用函数。 现在我需要它用于我正在进行的项目,需要模拟大量的function。 如何将我想要模拟的所有函数传递给Linker的’wrap’参数? 是否可以将函数名称存储在文件中,以便可以将其链接到链接器?

gcc链接选项-L:如何指定动态库路径的其他方法

如果我用“-L”编译我的源代码。 可以找到动态库libmd5.so。 gcc main.c -g -O2 -Wall -o main -L. -lmd5 -lcr 但是如果我离开“-L。” – 选项,链接器就找不到动态库。 如何在不调用“-L”的情况下进行更改? (附加信息libmd5.so和libmd5.so.1.0.1位于/ home / user / ba)

使用GCC / binutils对符号进行别名工作是间歇性的

我正在开发一些有限时间运行裸机的软件,直到Linux端口准备好进入黄金时段。 该软件正在与uClibc链接,uClibc提供了malloc,clock_gettime等的实现,但问题是它们都依赖于系统调用,因为我们还没有内核来处理它们,因此只会陷阱硬件。 我一直在使用别名来覆盖我们需要的函数,即our_mem.c: void* our_malloc(size_t size) { .. } void* malloc(size_t size) __attribute__ ((malloc, weak, alias(“our_malloc”))); 问题是,这似乎有点随机。 我可以有一个构建,其中所有调用都是正确的别名,在下一个构建中,我在一个不相关的文件中修改了它,它突然工作到一个点,然后其中一个调用转到uClibc malloc。 起初我认为这是链接顺序的问题,但构建系统始终以相同的顺序链接,同一个调用将在一个构建中工作,并在下一个构建中失败。 二进制文件(显然)是静态链接的。 我不确定这究竟是如何使用别名的,因为我没有找到很多关于它的文档但我几年前在malloc和朋友(也使用uClibc)上成功使用了这种技术然后它一直工作。

符号版本和dlsym

我使用dlopen在我的程序中加载pthread库,并使用dlsym处理程序提取到pthread_create和pthread_join 。 如何确保两个处理程序都是兼容版本? 我不在乎这些符号是新版本还是旧版本。 我只是希望无论使用什么pthread_create我都能使用pthread_join 。 我知道有一个dlvsym ,我可以传递显式版本号,但我不关心确切的版本号,因为我希望我的代码独立于库版本。

visual studio c链接器包装选项?

本文使用C中的模拟对象进行unit testing 这是通过使用–wrap链接器选项来完成的,该选项将包装函数的名称作为参数。 如果测试是使用gcc编译的,则调用可能如下所示: $ gcc -g -Wl,–wrap=chef_cook waiter_test.c chef.c 在visual studio中编译ac项目时如何做到这一点?

链接错误:已经在*****中定义了xxx.LIB ::究竟出了什么问题?

问题: 我正在尝试使用名为DCMTK的库,该库使用了一些其他外部库(zlib,libtiff,libpng,libxml2,libiconv)。 我从同一个网站下载了这些外部库(* .LIB和* .h文件)。 现在,当我编译DCMTK库时,我收到链接错误(793错误),如下所示: Error 2 error LNK2005: __encode_pointer already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib dcmmkdir Error 3 error LNK2005: __decode_pointer already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib dcmmkdir Error 4 error LNK2005: __CrtSetCheckCount already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib dcmmkdir Error 5 error LNK2005: __invoke_watson already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib dcmmkdir Error 6 error LNK2005: __errno […]