Tag: 编译

是否有理由不使用链接时优化(LTO)?

GCC,MSVC,LLVM以及可能的其他工具链支持链接时(整个程序)优化,以允许编译单元之间的调用优化。 编译生产软件时是否有理由不启用此选项?

是否可以在makefile中定义C宏?

是否可以将等效的#define VAR (在C程序中)放入makefile中,以便可以控制程序的哪一部分应该编译?

我可以在C程序中使用C ++创建的共享库吗?

我正在使用C创建程序。但是,我需要使用许多只有C ++的API。 那么,我是否有可能在C ++中创建共享对象,然后使用C访问其function? 我将传递和返回的唯一数据是C兼容的数据类型。 转换或迁移到cpp不是一个选项。 如果无法连接这些代码,我如何从C ++代码获取信息到C代码? 我尝试从C调用C ++函数,但是当我包含时,在链接期间出现错误。 所以当我从C调用C ++函数时,我应该只使用那些与C编译器兼容的代码吗? C ++头文件cppfile.hpp #ifndef CPPFILE_H #define CPPFILE_H #ifdef __cplusplus extern “C” { #endif extern int myfunction(const char *filename); #ifdef __cplusplus } #endif #endif C ++文件cppfile.cpp #include “cppfile.hpp” #include int myfunction(const char *filename) { String S(filename); return 0; } C文件cmain.c #include “cppfile.hpp” int main(int argc, […]

编译程序中的多个C文件

我有以下两个文件: 在file1.c int main(){ foo(); return 0; } file2.c中 void foo(){ } 我可以file1.c两个文件一起编译和链接,这样file1.c将识别foo函数而不添加extern吗? 更新了原型。 gcc file1.c file2.c throws:warning:函数foo的隐式声明。

如何解决致命错误LNK1000:IncrBuildImage期间的内部错误?

我正在尝试使用Visual Studio 2008在Windows 7 64位上重新编译memcached项目的解决方案文件,并收到以下错误: 1>LINK : fatal error LNK1000: Internal error during IncrBuildImage 1> Version 9.00.21022.08 1> ExceptionCode = C0000005 1> ExceptionFlags = 00000000 1> ExceptionAddress = 001FFCF7 (00180000) “C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\link.exe” 1> NumberParameters = 00000002 1> ExceptionInformation[ 0] = 00000000 1> ExceptionInformation[ 1] = 011BD670 1>CONTEXT: 1> Eax = 400DA210 […]

C函数定义为int但在正文中没有返回语句仍然编译

假设您有这样的C代码: #include int main(){ printf(“Hello, world!\n”); printf(“%d\n”, f()); } int f(){ } 它用gcc编译好,输出(在我的系统上)是: 你好,世界! 14 但是……但是……这怎么可能? 我认为C不会让你编译那样的东西因为f()没有返回整数的return语句。 为什么允许这样做? 它是Cfunction或编译器遗漏,14来自哪里?

如何链接到C中的静态库?

我使用code :: blocks来编译我的静态库。 输出结果是libstatic.a文件。 现在,如何链接到我的库以使用已编译的函数? (我尝试使用#include“libstatic.a”,但我的项目没有编译)

使用QtCreator找不到-lrt的库

使用选项“-lrt”构建的QT让我遇到一些麻烦 我正在使用带有QT创建者1.2.1的mac os 10.6,heeeeeeelp! 这是完整的构建命令: g ++ -headerpad_max_install_names -o AMiningCoreTest main.o tokenizer.o DictionnaryToolBox.o mysql.o btree.o BTreeDataTable.o tcaccess.o -L / Library / Frameworks -L / usr / lib / mysql -lmysqlclient -L / usr / local / lib / -ltokyocabinet -lz -lbz2 -lrt -lpthread -lm -lc 它结束了 ld:找不到-lrt collect2的库:ld返回1退出状态

如何在C中链接多个实现文件

我有一些.c文件,即实现文件说 main.c中 AC 公元前 来自任何文件的函数可以从不同的文件中调用任何函数。 我的问题是,我是否需要一个.h ie头文件用于A和B的每个实现,其中每个头文件都有A或B中所有函数的定义。 另外,main.c会包含Ah和Bh #included吗? 如果有人能够最终说清楚,那么我如何在以后编译并运行终端中的多个文件。 谢谢。

未定义的引用`initscr’ncurses

我正在尝试编译我的项目,我使用lib ncurse。 编译器链接文件时我遇到了一些错误。 这是我在Makefile中的标志行: -W -Wall -Werror -Wextra -lncurses 我已经包含了ncurses.h 一些布局: prompt$> dpkg -S curses.h libslang2-dev:amd64: /usr/include/slcurses.h libncurses5-dev: /usr/include/ncurses.h libncurses5-dev: /usr/include/curses.h prompt$> dpkg -L libncurses5-dev | grep .so /usr/lib/x86_64-linux-gnu/libncurses.so /usr/lib/x86_64-linux-gnu/libcurses.so /usr/lib/x86_64-linux-gnu/libmenu.so /usr/lib/x86_64-linux-gnu/libform.so /usr/lib/x86_64-linux-gnu/libpanel.s 这是我的错误: gcc -W -Wall -Werror -Wextra -I./Includes/. -lncurses -o Sources/NCurses/ncurses_init.o -c Sources/NCurses/ncurses_init.c ./Sources/NCurses/ncurses_init.o: In function `ncruses_destroy’: ncurses_init.c:(.text+0x5): undefined reference to `endwin’ ./Sources/NCurses/ncurses_init.o: […]