c - 对 `strtok_r' Windows 10 MinGW 的 undefined reference

标签 c gcc mingw

我在编译时总是遇到错误,它说未定义对“strtok_r”的引用,我在Windows 10中使用MinGW,请帮助解决这个问题。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main(int argc, char **argv) {
  char *test1, *test2;
  char *state1, *state2;
  char *cur1, *cur2;

  test1 = malloc(20);
  test2 = malloc(20);
  strcpy(test1, "a,b,c,d");
  strcpy(test2, "e,f,g,h");

  cur1 = strtok_r(test1, ",", &state1);
  cur2 = strtok_r(test2, ",", &state2);
  while (cur1 != NULL && cur2 != NULL) {
    if (cur1 != NULL) {
      printf("cur1 : %s\n", cur1);
    }
    if (cur2 != NULL) {
      printf("cur2 : %s\n", cur2);
    }
    cur1 = strtok_r(NULL, ",", &state1);
    cur2 = strtok_r(NULL, ",", &state2);
  };
}

这是 Windows 10 中的错误和警告消息

strtok-test.c: In function 'main':
strtok-test.c:16:10: warning: implicit declaration of function 'strtok_r' [-Wimplicit-function-declaration]
   cur1 = strtok_r(test1, ",", &state1);
          ^~~~~~~~
strtok-test.c:16:8: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
   cur1 = strtok_r(test1, ",", &state1);
        ^
strtok-test.c:17:8: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
   cur2 = strtok_r(test2, ",", &state2);
        ^
strtok-test.c:25:10: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
     cur1 = strtok_r(NULL, ",", &state1);
          ^
strtok-test.c:26:10: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
     cur2 = strtok_r(NULL, ",", &state2);
      ^
C:\Users\AppData\Local\Temp\ccvzdBJh.o: In function `main':
C:\Users\Desktop\New folder/strtok-test.c:16: undefined reference to `strtok_r'
C:\Users\Desktop\New folder/strtok-test.c:17: undefined reference to `strtok_r'
C:\Users\Desktop\New folder/strtok-test.c:25: undefined reference to `strtok_r'
C:\Users\Desktop\New folder/strtok-test.c:26: undefined reference to `strtok_r'
collect2.exe: error: ld returned 1 exit status

最佳答案

strtok_r 不是标准 C 方法(它是 POSIX)。您的编译器可能不兼容 POSIX,因此其标准库可能不包含该方法。查看您的 string.h 文件并查看其原型(prototype)是否已在那里声明。

关于c - 对 `strtok_r' Windows 10 MinGW 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50494670/

相关文章:

C程序编译但不运行

c++ - 为什么此代码在 Mac 和 Red Hat 中运行如此不同

gcc - 使用 `nm` 命令列出局部变量

objective-c - 无法在动态链接库 libintl-8.dll 中找到过程入口点 __printf__

c - 为什么以下代码中不需要 & 号?

c - 使用 -std=c99 编译时,我需要使用 -pedantic 还是 -ansi?

c - 是否在函数内部使用 calloc,更改作为函数参数传递的指针

java - JNI : Problems compiling 64-bit native libraries

c - MinGW 创建的文件具有奇怪的权限?

c++ - 跳过不兼容的 eclipse