|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
main.c
#include "sort.c"
#include <stdio.h>
int main()
{
int arr[] = {5,4,7,34,5,7,2,3,6,9,0,2};
int n = sizeof(arr) / sizeof(arr[0]);
sort(arr,n);
}
sort.c
#include <stdio.h>
void sort(int arr[],int n)
{
for(int j = 1;j < n;j++)
{
int i = j - 1;
int key = arr[j];
while (i > 0 && arr[i] > key) {
arr[i + 1] = arr[i];
i--;
}
arr[i + 1] = key;
}
for(int a = 0;a < n;a++)
{
printf("%d",arr[a]);
}
}
报错
====================[ 构建 | algorithms | Debug ]=================================
/Applications/CLion.app/Contents/bin/cmake/mac/bin/cmake --build "/Volumes/My file/C/github/algorithms/cmake-build-debug" --target algorithms -j 6
[3/3] Linking C executable algorithms
FAILED: algorithms
: && /Library/Developer/CommandLineTools/usr/bin/cc -g -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.0.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/algorithms.dir/main.c.o CMakeFiles/algorithms.dir/sort.c.o -o algorithms && :
duplicate symbol '_sort' in:
/Volumes/My file/C/github/algorithms/cmake-build-debug/CMakeFiles/algorithms.dir/sort.c.o
/Volumes/My file/C/github/algorithms/cmake-build-debug/CMakeFiles/algorithms.dir/main.c.o
ld: 1 duplicate symbols
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
这个错误是由于存在重复的符号 "_sort" 引起的。重复符号意味着在链接过程中,编译器找到了相同名称的函数或变量定义。
在您的代码中,sort.c 文件中定义了 sort 函数,而 main.c 文件中也包含了 sort.c 文件。这导致在链接时出现重复的符号 "_sort"。
要解决这个问题,可以使用以下两种方法之一:
方法一:将 sort 函数的定义放在头文件中
sort.h #ifndef SORT_H#define SORT_Hvoid sort(int arr[], int n);#endif
sort.c #include "sort.h"#include <stdio.h>void sort(int arr[], int n){ // 排序逻辑}
main.c #include "sort.h"#include <stdio.h>int main(){ int arr[] = {5,4,7,34,5,7,2,3,6,9,0,2}; int n = sizeof(arr) / sizeof(arr[0]); sort(arr,n);}
在这种方式下,sort 函数的定义被放在 sort.h 头文件中,并被包含在 sort.c 和 main.c 文件中,这样就避免了重复符号的问题。
方法二:只在 main.c 文件中包含 sort.c 文件
main.c #include <stdio.h>// 在主函数文件中直接定义 sort 函数,不需要另外引入 sort.c 文件void sort(int arr[], int n){ // 排序逻辑}int main(){ int arr[] = {5,4,7,34,5,7,2,3,6,9,0,2}; int n = sizeof(arr) / sizeof(arr[0]); sort(arr,n);}
在这种方式下,可以直接将 sort 函数的定义放在主函数文件 main.c 中,而不需要包含 sort.c 文件。这样也能解决重复符号的问题。
您可以根据个人偏好选择其中一种方法来解决重复符号的错误。请注意,在使用方法二时,sort 函数的定义应该位于 main 函数之前,或者提前进行函数声明。
球一个最佳答案谢谢啦!这对我非常重要!
|
|