在C语言中包含一个外部库
我正在尝试使用一个C库来学习哈佛大学的开放式课程。可以找到讲师关于设置外部库的说明 当我试图在我的ubuntu盒上使用这个lib时,我遵循ubuntu的特定说明。我按照页面上的说明进行了设置,但是当我使用cs50库函数运行一个简单的在C语言中包含一个外部库,c,cs50,C,Cs50,我正在尝试使用一个C库来学习哈佛大学的开放式课程。可以找到讲师关于设置外部库的说明 当我试图在我的ubuntu盒上使用这个lib时,我遵循ubuntu的特定说明。我按照页面上的说明进行了设置,但是当我使用cs50库函数运行一个简单的helloWorld.c程序时,gcc不想执行 例如: helloWorld.c 我严格按照说明书中的说明去做,但它们对我不起作用。我正在运行ubuntu 12.04。如果我能进一步澄清我的问题,请告诉我。在编译过程中,您需要链接库。如果你在Ubuntu上,库应该以.
helloWorld.c
程序时,gcc不想执行
例如:
helloWorld.c
我严格按照说明书中的说明去做,但它们对我不起作用。我正在运行ubuntu 12.04。如果我能进一步澄清我的问题,请告诉我。在编译过程中,您需要链接库。如果你在Ubuntu上,库应该以.a或.so结尾。要链接到库,请执行以下操作:
gcc -o myProgram myProgram.c -l(library name goes here but no parentheses)
首先,作为初学者,您应该始终要求GCC编译时启用所有警告和调试信息,即
GCC-Wall-g
。但有时也会阅读。使用一个好的工具(例如or等)来编辑您的C源代码,但要能够在命令行上编译您的程序(因此不要总是使用复杂的工具来隐藏重要的编译细节)
然后,您可能缺少一些哈佛特定的库,一些选项,如-L
,后跟库目录,然后粘贴到库名称上。因此,您可能需要gcc-Wall-g-lcs50
(用适当的名称替换cs50
),您可能需要一些-L
一些目录
请注意,gcc
的程序参数顺序非常重要。一般来说,如果a
依赖于b
,则应将a
放在b
之前;更具体地说,我建议
gcc
程序名开始;如果需要,添加C标准等级eg-std=c99
-Wall-g
(您甚至可能需要添加-Wextra
以获得更多警告)-DONE=1
和-Imy include dir/
bar.o
-Lmy lib dir/
-laa
和-lbb
(当libaa.so
依赖于libbb.so
时,按该顺序)-o程序名
结束,给出生成的二进制文件的名称。不要使用默认名称a.out
-I
(对于预处理器包括)和-L
,顺序非常重要(搜索顺序)
很快,您就会希望使用以下工具(可能是Linux上的)
也要学会学习
养成经常向编译器询问警告的习惯,不断改进你的程序,直到没有警告为止:编译器是你的朋友,它在帮助你
还可以阅读《名人录》(这本书教授非常重要的概念;你可能想在阅读时了解更多)。还要注意以下工具:
玩得开心。你必须链接到库,GCC怎么知道你要使用哪个库
gcc helloWorld.c -lcs50
祝你一切顺利 我参加了这门课程,有时我需要在旅行或通勤时离线练习。在Windows下,使用MinGW和Notepad++作为IDE(因为我喜欢它,并且通常在编写python时使用它),我终于找到了一个解决方案,并花了一些时间将其写下来 从头开始。设置gcc C编译器的步骤,如果已经设置,请跳到5
- 将其保存在您的工作目录Documents/Harvard_CS50/Week2中/ hello.c
包含的头文件只是标记函数的原型。因此,您的文件编译良好,但存在链接错误。您是否按照建议安装了库?如果是这样的话,您能检查一下库是否正确安装,路径变量是否正确设置,以便gcc可以使用路径找到这些库吗?gcc helloWorld.c-lcs50是否有效?是的,我没有意识到我有
gcc -o myProgram myProgram.c -l(library name goes here but no parentheses)
gcc helloWorld.c -lcs50
#include <stdio.h>
int main(void)
{
printf("Hello StackOverflow\n");
}
#include <stdio.h>
#include <cs50.h>
int main(void)
{
printf("Please input a string to count how long it is: ");
string s = get_string();
int n = 0;
while (s[n] != '\0')
{
n++;
}
printf("Your string is %i chars long\n", n);
}
npp_save
gcc -ggdb -std=c99 -Wall -Werror "$(FULL_CURRENT_PATH)" -lcs50 -o "$(CURRENT_DIRECTORY)\$(NAME_PART).exe"
cmd /c "$(CURRENT_DIRECTORY)\$(NAME_PART).exe"