我正在尝试将C库用于哈佛大学的开放课程.可以在此处找到教师有关设置外部库的说明.
我正在按照ubuntu特有的说明进行操作,因为我试图在我的ubuntu盒子上使用这个库.我按照页面上的说明进行设置,但是当我helloWorld.c使用cs50库函数运行一个简单的程序时,gcc不想播放.
例:
helloWorld.c
#include <stdio.h>
#include <cs50.h>
int
main(void){
printf("What do you want to say to the world?\n");
string message = GetString();
printf("%s!\n\n", message);
}
Run Code Online (Sandbox Code Playgroud)
$ gcc helloWorld.c
/tmp/ccYilBgA.o: In function `main':
helloWorld.c:(.text+0x16): undefined reference to `GetString'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我按照指示中的说明按照说明进行了操作,但它们对我不起作用.我正在运行ubuntu 12.04.如果我能进一步澄清我的问题,请告诉我.
Bas*_*tch 21
首先,作为初学者,您应该总是要求GCC编译并启用所有警告和调试信息,即 gcc -Wall -g
然后你可能会遗漏一些哈佛特定的库,一些选项如gcc后跟一个库目录,然后-L粘贴到库名.所以你可能需要-l(用gcc -Wall -g -lcs50适当的名字替换),你可能需要一些cs50dir
请注意,程序参数的顺序-L很重要.作为一般规则,如果gcc取决于a你应该放在b前面a; 我建议更具体
b程序名称开始; 添加C标准级别,例如,gcc如果需要-std=c99(您甚至可能希望添加-Wall -g以获得更多警告).-Wextra和-DONE=1 -Imy-include-dir/ hello.c bar.o如果相关,请放置库目录-Lmy-lib-dir/和-laa(当-lbb取决于libaa.so,按照这个顺序)libbb.so给出生成的二进制文件的名称.不要使用默认名称-o your-program-name 提供选项a.out(用于预处理器包括)和-I库的目录可以多次给出,顺序很重要(搜索顺序).
你很快就会想要使用像这样的构建工具 -L
还要学习使用调试器 make
养成总是要求编译器发出警告的习惯,并始终改进你的程序,直到你得不到警告:编译器是你的朋友,它正在帮助你!
玩得开心.
Gun*_*ach 12
我学习这门课程,有时我需要在旅行或通勤时离线练习。在Windows下使用MinGW和Notepad++作为IDE(因为我喜欢它并且通常在编写python时使用它)我终于找到了一个解决方案并花了一些时间把它写下来。
从头开始。设置gcc C编译器的步骤,如果已经设置请跳至5

确保你的编译器可以工作。扔掉这个简单的代码,
Run Code Online (Sandbox Code Playgroud)#include <stdio.h> int main(void) { printf("Hello StackOverflow\n"); }
cd 文件/Harvard_CS50/Week2/
gcc helloworld.c -o helloworld.exe
./helloworld.exe
你好堆栈溢出
现在到了重要的一点,在本地安装 CS50 库并离线使用它。这应该适用于课程后面介绍的任何其他库。
从https://github.com/cs50/libcs 50/tree/develop/src 下载最新的源代码文件 cs50.c 和头文件 cs50.h并将其保存在Documents/Harvard_CS50/src中
导航到 src 目录并列出文件,以确保您位于正确的位置,使用
LS
cs50.c cs50.h
酷,我们来了。现在我们需要使用以下命令为库编译目标文件
gcc -c -ggdb -std=c99 cs50.c -o cs50.o
现在使用生成的 cs50.o 目标文件,我们可以创建 cs50 库存档文件。
ar rcs libcs50.a cs50.o
完成所有这些步骤后,我们在原始文件中添加了 2 个附加文件。我们只对其中 2 个感兴趣cs50.h libcs50.a
LS
cs50.c cs50.h cs50.o libcs50.a
将库和头文件复制到其目标位置。我的 MinGW 安装在 C:\ 所以我将它们复制到那里
cs50.h --> C:\MinGW\include
libcs50.a --> C:\MinGW\lib
测试 cs50 库
为了确保我们的库正常工作,我们可以在讲座中抛出一个示例脚本,看看是否可以使用 get_string() 方法的 cs50.h 头文件对其进行编译。
#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);
}
Run Code Online (Sandbox Code Playgroud)
使用 gcc 和 cs50 库编译 cs50 代码。我想明确并使用:
gcc -ggdb -std=c99 -Wall -Werror test.c -lcs50 -o test.exe
但你可以简单地指出源、输出文件名和cs50库
gcc test.c -o test.exe -lcs50
在这里,程序是使用标头编译的,并且可以在其中使用方法。
如果您希望 Notepad++ 作为 IDE,您可以按照此提示将 gcc 设置为编译器并从那里运行您的代码。只需确保您的 nppexec 脚本包含 cs50 库
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"
Run Code Online (Sandbox Code Playgroud)