gcc 相关问题

GCC是GNU编译器集合。它是Linux上事实上的标准C编译器,也支持许多其他语言和平台。

MinGW GCC 通配符编译所有文件(Windows)

我在Windows上使用MinGW GCC编译器, 我需要编译一个文件夹中的所有c文件! 我试过了 gcc *.c -o 输出 {文件夹路径} 我收到这个错误 gcc:错误:*.c:参数无效 gcc:致命...

回答 3 投票 0

在编译时启用 AVX512 支持会显着降低性能

我有一个使用静态库的 C/C++ 项目。该图书馆是为“天湖”建筑而建的。该项目是一个数据处理模块,即它执行许多算术运算,内存...

回答 1 投票 0

这是 gcc 错误吗?当在 __m256i

当用 gcc 编译时,函数 sum_of_squares 返回 0。我做错了什么还是这是一个 gcc bug?我知道我不会处理 n 不能被 8 整除的情况。 #包括 用 gcc 编译时,函数 sum_of_squares 返回 0。我做错了什么还是这是 gcc bug?我知道我不会处理 n 不能被 8 整除的情况。 #include <stdio.h> #include <x86intrin.h> int sum_of_squares(int x[], int n) { int sum = 0; __m256i sum8 = _mm256_set1_epi32(0); for (int i = 0; i < n; i += 8) { __m256i x8 = _mm256_load_si256((__m256i *)&x[i]); x8 = _mm256_mul_epi32(x8, x8); sum8 = _mm256_add_epi32(x8, sum8); } int *_sum = (int *)&sum8; for (int i = 0; i < 8; i++) sum += _sum[i]; return sum; } int main() { _Alignas(32) int x[16]; for (int i = 0; i < 15; i++) { x[i] = i; } printf("%d", sum_of_squares(x, 16)); } 将 int* 指向 __m256i(long long 元素的 GNU C 向量)违反了严格别名规则。 因此,GCC14.2 -O2 将您的函数优化为 return 0;。 (xor eax,eax / ret). 我们可以通过使用 -fno-strict-aliasing 并看到非零结果来验证这是问题所在。 (请参阅 Godbolt )。 MSVC 始终允许所有别名,并且它并不总是在 GCC 或 Clang 上中断,因此有些人错误地认为像您这样的代码是安全的。 事实并非如此,正如本例所示。 不幸的是 -fsanitize=undefined 没有捕获此错误(或未初始化的 x[] 的最后一个元素)。 但一般来说,当您检查 asm 并看到您的函数优化为 return 0; 时,这通常意味着您要么返回了错误的变量,要么存在编译时可见的 UB。 (有时编译器甚至不设置返回值,甚至省略 ret 指令,因此执行会陷入接下来的情况。) 使用 _mm256_storeu_si256 到 int tmparr[8];(或者对齐 tmp 数组并使用 _mm256_store_si256)。 或者更好,请参阅 使用 AVX512 或 AVX2 计算所有打包 32 位整数之和的最快方法(一般来说 进行水平 SSE 向量和(或其他缩减)的最快方法) - 洗牌将低半部分向下与低半部分对齐并进行垂直 SIMD 加法,每一步减少一半的元素数量,直到你只剩下一个了。 (如果您避免使用 UB,GCC 实际上会将您的归约循环优化为一系列洗牌和添加。) 测试用例中其他不相关的错误 正如 Soonts 提到的,您还需要 vpmulld (_mm256_mullo_epi32) 非展宽 32 位乘法,而不是 vpmuldq (_mm256_mul_epi32) 展宽有符号乘法,后者仅读取偶数元素以产生 64 位结果。 你的严格别名错误就是你得到零的原因;解决这个问题对于获得您想要的非零结果也是必要的,而不仅仅是偶数元素(0,2等)的总和。 您还应该初始化第 16 个元素 (x[15]),正如 Soonts 指出的那样,您当前的代码无法做到这一点。 __attribute__((may_alias)) 让您可以键入 int 的版本,您可以指向任何东西 如果你真的想要,你可以使用 typedef int32_t aliasing_i32 __attribute__((may_alias)),你可以安全地指向任何对齐 4 或更多的东西,使用它代替 int 作为你的指针类型。 (或者如果您使用 __attribute__((may_alias, aligned(1))),则不对齐)。 有趣的事实:GCC 和 Clang 对 __m256i 的定义使用 may_alias,允许您将 __m256i* 指向任何东西,但反之则不然。 但这并没有什么好处;数组不占用“额外”存储空间; __m256i向量优化为仅YMM寄存器。 无论如何,归约循环都会优化为随机播放,但如果没有,无论哪种编写方式都会有 32 字节的堆栈空间,该空间由 vmovdqa 写入并由标量循环读取。 x8 = _mm256_mul_epi32(x8, x8); 指导并没有达到你期望的效果。它仅使用每个 64 位通道中的最低 32 位,并计算 4 个乘积,每个乘积 64 位。 要计算 8 个 32 位乘积,请考虑使用 _mm256_mullo_epi32。 for (int i = 0; i < 15; i++) 请注意,您仅初始化 15 个数字,然后加载 16 个。 int *_sum = (int *)&sum8; 这可行,但通常会编译成缓慢的代码,矢量存储然后标量加载。 要计算向量中所有数字的水平总和,请参阅答案。 #include <stdio.h> #include <x86intrin.h> int sum_of_squares(int x[], int n) { if( 0 != (n+1)%8 ) { // Here n needs to be multiples of 8 - 1 printf( "sum_of_squares data size parameter needs to be multiples of 8-1\n"); printf( "data size n: %d n-1: %d\n", n, n-1); printf( "Allowed values for n: 7, 15, 23, ...\n"); return -1; } int sum = 0; __m256i sum8 = _mm256_set1_epi32(0); for (int i = 0; i < n; i += 8) { __m256i initVal = _mm256_load_si256((__m256i *)&x[i]); __m256i x8 = _mm256_load_si256((__m256i *)&x[i]); // x8 = _mm256_mul_epi32(x8, x8); x8 = _mm256_mullo_epi32( initVal, x8); sum8 = _mm256_add_epi32(x8, sum8); } int *_sum = (int *)&sum8; for (int i = 0; i < 8; i++) sum += _sum[i]; return sum; } int main() { { _Alignas(32) int x[8]; for (int i = 0; i < 8; i++) { x[i] = i; } printf( "sum_of_squares of 0^2+1^2+2^2+..7^2 elements: %d\n", sum_of_squares(x, 8-1)); int n = 8-1; printf( "%d*(%d+1)*(2*%d+1)/6 = %d*%d*(%d+1)/6 = %d*%d*%d/6 = %d\n", n, n, n, n, n+1, 2*n, n, n+1, 2*n+1, n*(n+1)*(2*n+1)/6 ); } { _Alignas(32) int x[16]; for (int i = 0; i < 16; i++) { x[i] = i; } printf( "sum_of_squares of 0^2+1^2+2^2+..15^2 elements: %d\n", sum_of_squares(x, 16-1)); int n = 16-1; printf( "%d*(%d+1)*(2*%d+1)/6 = %d*%d*(%d+1)/6 = %d*%d*%d/6 = %d\n", n, n, n, n, n+1, 2*n, n, n+1, 2*n+1, n*(n+1)*(2*n+1)/6 ); } { _Alignas(32) int x[24]; for (int i = 0; i < 24; i++) { x[i] = i; } printf( "sum_of_squares of 0^2+1^2+2^2+..23^2 elements: %d\n", sum_of_squares(x, 24-1)); int n = 24-1; printf( "%d*(%d+1)*(2*%d+1)/6 = %d*%d*(%d+1)/6 = %d*%d*%d/6 = %d\n", n, n, n, n, n+1, 2*n, n, n+1, 2*n+1, n*(n+1)*(2*n+1)/6 ); } { _Alignas(32) int x[4]; for (int i = 0; i < 4; i++) { x[i] = i; } printf( "sum_of_squares of 0^2+1^2+2^2+..23^2 elements: %d\n", sum_of_squares(x, 4-1)); int n = 4-1; printf( "%d*(%d+1)*(2*%d+1)/6 = %d*%d*(%d+1)/6 = %d*%d*%d/6 = %d\n", n, n, n, n, n+1, 2*n, n, n+1, 2*n+1, n*(n+1)*(2*n+1)/6 ); } { _Alignas(32) int x[13]; for (int i = 0; i < 13; i++) { x[i] = i; } printf( "sum_of_squares of 0^2+1^2+2^2+..23^2 elements: %d\n", sum_of_squares(x, 13-1)); int n = 13-1; printf( "%d*(%d+1)*(2*%d+1)/6 = %d*%d*(%d+1)/6 = %d*%d*%d/6 = %d\n", n, n, n, n, n+1, 2*n, n, n+1, 2*n+1, n*(n+1)*(2*n+1)/6 ); } // I feel better to use mathematical formula instead of wasting memories at RAM and process handlers. return 0; } /* $ /usr/bin/gcc.exe -mavx2 -g -Wall sum_of_squares.c -o ./a.out $ ./a.out sum_of_squares of 0^2+1^2+2^2+..7^2 elements: 140 7*(7+1)*(2*7+1)/6 = 7*8*(14+1)/6 = 7*8*15/6 = 140 sum_of_squares of 0^2+1^2+2^2+..15^2 elements: 1240 15*(15+1)*(2*15+1)/6 = 15*16*(30+1)/6 = 15*16*31/6 = 1240 sum_of_squares of 0^2+1^2+2^2+..23^2 elements: 4324 23*(23+1)*(2*23+1)/6 = 23*24*(46+1)/6 = 23*24*47/6 = 4324 sum_of_squares data size parameter needs to be multiples of 8-1 data size n: 3 n-1: 2 Allowed values for n: 7, 15, 23, ... sum_of_squares of 0^2+1^2+2^2+..23^2 elements: -1 3*(3+1)*(2*3+1)/6 = 3*4*(6+1)/6 = 3*4*7/6 = 14 sum_of_squares data size parameter needs to be multiples of 8-1 data size n: 12 n-1: 11 Allowed values for n: 7, 15, 23, ... sum_of_squares of 0^2+1^2+2^2+..23^2 elements: -1 12*(12+1)*(2*12+1)/6 = 12*13*(24+1)/6 = 12*13*25/6 = 650 */

回答 3 投票 0

这是 gcc 错误吗?当在 __m256i

当用 gcc 编译时,函数 sum_of_squares 返回 0。我做错了什么还是这是一个 gcc bug?我知道我不会处理 n 不能被 8 整除的情况。 #包括 用 gcc 编译时,函数 sum_of_squares 返回 0。我做错了什么还是这是 gcc bug?我知道我不会处理 n 不能被 8 整除的情况。 #include <stdio.h> #include <x86intrin.h> int sum_of_squares(int x[], int n) { int sum = 0; __m256i sum8 = _mm256_set1_epi32(0); for (int i = 0; i < n; i += 8) { __m256i x8 = _mm256_load_si256((__m256i *)&x[i]); x8 = _mm256_mul_epi32(x8, x8); sum8 = _mm256_add_epi32(x8, sum8); } int *_sum = (int *)&sum8; for (int i = 0; i < 8; i++) sum += _sum[i]; return sum; } int main() { _Alignas(32) int x[16]; for (int i = 0; i < 15; i++) { x[i] = i; } printf("%d", sum_of_squares(x, 16)); } 将 int* 指向 __m256i(long long 元素的 GNU C 向量)违反了严格别名规则。 因此,GCC14.2 -O2 将您的函数优化为 return 0;。 (xor eax,eax / ret). 我们可以通过使用 -fno-strict-aliasing 并看到非零结果来证明这是问题所在。 (在 Godbolt 上查看两者)不幸的是 -fsanitize=undefined 没有捕获此错误(或 x[] 的未初始化的最终元素)。 但一般来说,当您检查 asm 并看到您的函数优化为 return 0; 时,这通常意味着您要么返回了错误的变量,要么存在编译时可见的 UB。 (有时编译器甚至不设置返回值,甚至省略 ret 指令,因此执行会陷入接下来的情况。) 使用 _mm256_storeu_si256 到 int tmparr[8];(或者对齐 tmp 数组并使用 _mm256_store_si256)。 或者更好,请参阅 使用 AVX512 或 AVX2 计算所有打包 32 位整数之和的最快方法(一般来说 进行水平 SSE 向量和(或其他缩减)的最快方法) - 洗牌将低半部分向下与低半部分对齐并进行垂直 SIMD 加法,每一步减少一半的元素数量,直到你只剩下一个了。 (如果您避免使用 UB,GCC 实际上会将您的归约循环优化为一系列洗牌和添加。) 测试用例中其他不相关的错误 正如 Soonts 提到的,您还需要 vpmulld (_mm256_mullo_epi32) 非展宽 32 位乘法,而不是 vpmuldq (_mm256_mul_epi32) 展宽有符号乘法,后者仅读取偶数元素以产生 64 位结果。 你的严格别名错误就是你得到零的原因;解决这个问题对于获得您想要的非零结果也是必要的,而不仅仅是偶数元素(0,2等)的总和。 您还应该初始化第 16 个元素 (x[15]),正如 Soonts 指出的那样,您当前的代码无法做到这一点。 __attribute__((may_alias)) 让您可以键入 int 的版本,您可以指向任何东西 如果你真的想要,你可以使用 typedef int32_t aliasing_i32 __attribute__((may_alias)),你可以安全地指向任何对齐 4 或更多的东西,使用它代替 int 作为你的指针类型。 (或者如果您使用 __attribute__((may_alias, aligned(1))),则不对齐)。 有趣的事实:GCC 和 Clang 对 __m256i 的定义使用 may_alias,允许您将 __m256i* 指向任何东西,但反之则不然。 但这并没有什么好处;数组不占用“额外”存储空间; __m256i向量优化为仅YMM寄存器。 无论如何,归约循环都会优化为随机播放,但如果没有,无论哪种编写方式都会有 32 字节的堆栈空间,该空间由 vmovdqa 写入并由标量循环读取。 x8 = _mm256_mul_epi32(x8, x8); 指导并没有达到你期望的效果。它仅使用每个 64 位通道中的最低 32 位,并计算 4 个乘积,每个乘积 64 位。 要计算 8 个 32 位乘积,请考虑使用 _mm256_mullo_epi32。 for (int i = 0; i < 15; i++) 请注意,您仅初始化 15 个数字,然后加载 16 个。 int *_sum = (int *)&sum8; 这可行,但通常会编译成缓慢的代码,矢量存储然后标量加载。 要计算向量中所有数字的水平总和,请参阅答案。 #include <stdio.h> #include <x86intrin.h> int sum_of_squares(int x[], int n) { if( 0 != (n+1)%8 ) { // Here n needs to be multiples of 8 - 1 printf( "sum_of_squares data size parameter needs to be multiples of 8-1\n"); printf( "data size n: %d n-1: %d\n", n, n-1); printf( "Allowed values for n: 7, 15, 23, ...\n"); return -1; } int sum = 0; __m256i sum8 = _mm256_set1_epi32(0); for (int i = 0; i < n; i += 8) { __m256i initVal = _mm256_load_si256((__m256i *)&x[i]); __m256i x8 = _mm256_load_si256((__m256i *)&x[i]); // x8 = _mm256_mul_epi32(x8, x8); x8 = _mm256_mullo_epi32( initVal, x8); sum8 = _mm256_add_epi32(x8, sum8); } int *_sum = (int *)&sum8; for (int i = 0; i < 8; i++) sum += _sum[i]; return sum; } int main() { { _Alignas(32) int x[8]; for (int i = 0; i < 8; i++) { x[i] = i; } printf( "sum_of_squares of 0^2+1^2+2^2+..7^2 elements: %d\n", sum_of_squares(x, 8-1)); int n = 8-1; printf( "%d*(%d+1)*(2*%d+1)/6 = %d*%d*(%d+1)/6 = %d*%d*%d/6 = %d\n", n, n, n, n, n+1, 2*n, n, n+1, 2*n+1, n*(n+1)*(2*n+1)/6 ); } { _Alignas(32) int x[16]; for (int i = 0; i < 16; i++) { x[i] = i; } printf( "sum_of_squares of 0^2+1^2+2^2+..15^2 elements: %d\n", sum_of_squares(x, 16-1)); int n = 16-1; printf( "%d*(%d+1)*(2*%d+1)/6 = %d*%d*(%d+1)/6 = %d*%d*%d/6 = %d\n", n, n, n, n, n+1, 2*n, n, n+1, 2*n+1, n*(n+1)*(2*n+1)/6 ); } { _Alignas(32) int x[24]; for (int i = 0; i < 24; i++) { x[i] = i; } printf( "sum_of_squares of 0^2+1^2+2^2+..23^2 elements: %d\n", sum_of_squares(x, 24-1)); int n = 24-1; printf( "%d*(%d+1)*(2*%d+1)/6 = %d*%d*(%d+1)/6 = %d*%d*%d/6 = %d\n", n, n, n, n, n+1, 2*n, n, n+1, 2*n+1, n*(n+1)*(2*n+1)/6 ); } { _Alignas(32) int x[4]; for (int i = 0; i < 4; i++) { x[i] = i; } printf( "sum_of_squares of 0^2+1^2+2^2+..23^2 elements: %d\n", sum_of_squares(x, 4-1)); int n = 4-1; printf( "%d*(%d+1)*(2*%d+1)/6 = %d*%d*(%d+1)/6 = %d*%d*%d/6 = %d\n", n, n, n, n, n+1, 2*n, n, n+1, 2*n+1, n*(n+1)*(2*n+1)/6 ); } { _Alignas(32) int x[13]; for (int i = 0; i < 13; i++) { x[i] = i; } printf( "sum_of_squares of 0^2+1^2+2^2+..23^2 elements: %d\n", sum_of_squares(x, 13-1)); int n = 13-1; printf( "%d*(%d+1)*(2*%d+1)/6 = %d*%d*(%d+1)/6 = %d*%d*%d/6 = %d\n", n, n, n, n, n+1, 2*n, n, n+1, 2*n+1, n*(n+1)*(2*n+1)/6 ); } // I feel better to use mathematical formula instead of wasting memories at RAM and process handlers. return 0; } /* $ /usr/bin/gcc.exe -mavx2 -g -Wall sum_of_squares.c -o ./a.out $ ./a.out sum_of_squares of 0^2+1^2+2^2+..7^2 elements: 140 7*(7+1)*(2*7+1)/6 = 7*8*(14+1)/6 = 7*8*15/6 = 140 sum_of_squares of 0^2+1^2+2^2+..15^2 elements: 1240 15*(15+1)*(2*15+1)/6 = 15*16*(30+1)/6 = 15*16*31/6 = 1240 sum_of_squares of 0^2+1^2+2^2+..23^2 elements: 4324 23*(23+1)*(2*23+1)/6 = 23*24*(46+1)/6 = 23*24*47/6 = 4324 sum_of_squares data size parameter needs to be multiples of 8-1 data size n: 3 n-1: 2 Allowed values for n: 7, 15, 23, ... sum_of_squares of 0^2+1^2+2^2+..23^2 elements: -1 3*(3+1)*(2*3+1)/6 = 3*4*(6+1)/6 = 3*4*7/6 = 14 sum_of_squares data size parameter needs to be multiples of 8-1 data size n: 12 n-1: 11 Allowed values for n: 7, 15, 23, ... sum_of_squares of 0^2+1^2+2^2+..23^2 elements: -1 12*(12+1)*(2*12+1)/6 = 12*13*(24+1)/6 = 12*13*25/6 = 650 */

回答 3 投票 0

这是 gcc 错误吗?

当用 gcc 编译时,函数 sum_of_squares 返回 0。我做错了什么还是这是一个 gcc bug?我知道我不会处理 n 不能被 8 整除的情况。 #包括 用 gcc 编译时,函数 sum_of_squares 返回 0。我做错了什么还是这是 gcc bug?我知道我不会处理 n 不能被 8 整除的情况。 #include <stdio.h> #include <x86intrin.h> int sum_of_squares(int x[], int n) { int sum = 0; __m256i sum8 = _mm256_set1_epi32(0); for (int i = 0; i < n; i += 8) { __m256i x8 = _mm256_load_si256((__m256i *)&x[i]); x8 = _mm256_mul_epi32(x8, x8); sum8 = _mm256_add_epi32(x8, sum8); } int *_sum = (int *)&sum8; for (int i = 0; i < 8; i++) sum += _sum[i]; return sum; } int main() { _Alignas(32) int x[16]; for (int i = 0; i < 15; i++) { x[i] = i; } printf("%d", sum_of_squares(x, 16)); } x8 = _mm256_mul_epi32(x8, x8); 指导并没有达到你期望的效果。它仅使用每个 64 位通道中的最低 32 位,并计算 4 个乘积,每个乘积 64 位。 要计算 8 个 32 位乘积,请考虑使用 _mm256_mullo_epi32。 for (int i = 0; i < 15; i++) 请注意,您仅初始化 15 个数字,然后加载 16 个。 int *_sum = (int *)&sum8; 这可行,但通常会编译成缓慢的代码,矢量存储然后标量加载。 要计算向量中所有数字的水平总和,请参阅答案。

回答 1 投票 0

我真的有 64 位或 32 位 gcc 吗?

我在 64 位 ARM Windows 上安装了 MSYS2。它当然安装了一些 MINGW 的东西,我不相信我单独安装了任何东西。 现在,我去为 VSCode CMake Tools exte 选择一个“套件”...

回答 1 投票 0

CPU特性和编译器符号

我有一个关于编译器设置符号的问题,特别是CPU功能标志(如SSE、AES、AVX)的实际设置。例如,如果我使用 -mavx 调用 gcc,则 __AVX__ 符号集是否不管...

回答 1 投票 0

有没有办法从GCC获取字符串文字?

我在谷歌上搜索了一段时间,但没有取得任何成果。我实际上正在寻找一种导出方法或如何获取所有字符串文字的列表,例如 int main(){ const char *p = "

回答 4 投票 0

c - 初始化从指针生成整数,无需强制转换和另外 2 个编译器错误

所以我收到此警告: 初始化从指针生成整数,无需强制转换 在下面的代码中: void receive(u_char *args, const struct pcap_pkthdr *pkthdr, const u_char *b...

回答 3 投票 0

在 C++ IDE 中自定义编译器命令

是否可以自定义或指定在代码块或任何其他 IDE(如 NetBeans 和 Eclipse C++)中进行编译的命令? 我问这个问题是因为我尝试了所有这些 IDE,但没有人可以...

回答 1 投票 0

为什么当我输入名称时我的可执行文件无法运行? (Mac OS X 山狮)Mac OS X 10.8.2

我试图从 XQuartz (X11) 终端运行我的程序,当我编译我的可执行文件时,上面没有星号,它不会运行。当我输入名称时,它说找不到该命令。我...

回答 1 投票 0

gcc 编译器不会因第一个错误而停止

如何让 gcc 在第一个错误后不停止编译。 是否有一个编译器标志可以做到这一点? 基本上我想删除一个类,但我不确定这会产生多大的影响......

回答 2 投票 0

CMake:删除编译选项

我有一个 CMake 项目,部分是由另一个软件生成的。 准确来说,该项目包含: .cmake 文件 (empty_cpp.cmake)。该文件是自动生成的,因此,任何cha...

回答 1 投票 0

GCC 无法编译,甚至在基本代码上也会从它自己的库中给出大量错误

我的一位朋友查看了我的代码并给出了一些改进建议。这些建议应该有效,并且我们已经解决了代码本身中的所有错误,但是在尝试编译时甚至是

回答 2 投票 0

使用 gcc-15 导入 std 模块

正如在此 gcc 补丁中提到的,std 模块是在 gcc 开发分支中构建的。我从源代码构建并尝试在 cmake 项目中使用它,但它显示未找到 std 模块。 这是我的最小例子:

回答 1 投票 0

这个“a.out”文件是什么?是什么让它消失?

我是 C 编程新手。当我尝试编译它时,我得到了一个 a.out 文件(我不知道它来自哪里),但它不知何故消失了。这里发生了什么? 这是我运行的命令: $ gcc h...

c gcc
回答 4 投票 0

gcc 优化:-O0 做什么?

根据gcc在线文档,它 减少编译时间并使调试产生预期结果。 这是默认设置。 那么它是否与完全省略 -O 标志相同?

gcc
回答 3 投票 0

错误:函数“rl_replace_line”的隐式声明在 C99 中无效 [-Werror,-Wimplicit-function-declaration]

我试图在我的代码中实现 rl_replace_line() ,但是当我尝试像这样编译它时: gcc -lreadline test.c -o 测试 我收到此错误消息: 错误:函数的隐式声明'

回答 3 投票 0

无法在 MSYS2 MinGW x86 shell 上安装 make : mingw-w64-i686-gettext-runtime-0.22.5-2 和 mingw-w64-i686-gettext-0.21-3 存在冲突

我想安装一个c++编译器并在MSYS2 MinGW x86 shell中进行make 所以我打开这个 shell 并输入 MINGW32> pacman -S mingw-w64-i686-make 我得到输出 解决依赖关系... 寻找

回答 1 投票 0

编译C程序

我正在尝试编译这段代码,但是如果我使用: gcc prt.c portaudio.h -o prt 但我收到此错误: main.c:47:对“Pa_OpenDefaultStream”的未定义引用 main.c:62: 对 `

c gcc
回答 8 投票 0

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.