Undefined reference to "S_ISDIR" and "S_ISREG" when compiling with "-betterC"

rempas rempas at tutanota.com
Mon Jan 10 19:20:56 UTC 2022


I'm having the following code:

```d
import core.sys.posix.sys.stat;

int is_dir(const char* path) {
   stat_t s;
   if (stat(path, &s) == 0) {
     if (S_ISDIR(s.st_mode)) return 1;
     else return 0;
   } else return 2;
}

int is_regf(const char* path) {
   stat_t s;
   if (stat(path, &s) == 0) {
     if (S_ISREG(s.st_mode)) return 1;
     else return 0;
   } else return 2;
}

extern (C) void main() {
   is_dir("/lol");
   is_regf("/tmp");
}
```

When I try to compile this code using "ldc2" and "dmd", I'm 
getting the following message (the "format" is different between 
the compilers tho):

```
estd.o:test.d:function _D4test6is_dirFxPaZi: error: undefined 
reference to '_D4core3sys5posixQk4stat7S_ISDIRFNbNikZb'
testd.o:test.d:function _D4test7is_regfFxPaZi: error: undefined 
reference to '_D4core3sys5posixQk4stat7S_ISREGFNbNikZb'
```
If I open the file from the "stat" module (in my linux system 
it's in "/usr/include/dlang/ldc/core/sys/posix/sys/stat.d"), I 
will see that these functions do exists and the weird thing is 
that it will work if I don't compile using the "-betterC" option 
but it will not if I do. If I'm not mistaken, "core*" should work 
with "-betterC". Any ideas?


More information about the Digitalmars-d-learn mailing list