2010-05-04 2 views
3

OS X에서 cc를 사용하여 Linux 용으로 개발 된 C 프로그램을 컴파일하고 싶습니다. sys/io.h 헤더가 포함되어 있습니다. 컴파일 할 때이 파일을 찾을 수 없다는 오류가 표시됩니까? os x 아래에 sys/io.h 헤더 파일이 없습니까?osx sys/io.h 찾을 수 없습니다.

도움이 될 것입니다.

감사합니다.

+0

무엇을 컴파일 하시겠습니까? – WhirlWind

답변

0
$ ls /usr/include/sys/io.h 
ls: /usr/include/sys/io.h: No such file or directory 

그것은 그렇게 보이지 않습니다. 포팅을해야 할 수도 있습니다.

Linux에이 헤더 파일이 있습니다. 그것이 해야하는 것처럼 보입니다 low level port input and output.

일반적으로/usr/include/sys의 것들은 운영 체제에 따라 다르기 때문에, 아직 포팅되지 않았다면 새로운 아키텍처로 포팅해야합니다.

+0

답변 해 주셔서 감사합니다! 이 프로그램은 outb()와 같은 함수를 사용하여 특정 레지스터에 값을 씁니다. 같은 기능을 제공하는 os x에 해당하는 헤더 파일이 있습니까? – ioh

+0

osx에서 저수준 io를 사용하려면 kernel mod priv가 있어야합니다. 다른 말로하면 나는 kext를 써야 할 것인가? – ioh

+0

정확하게 장치에 의존하지만 kext를 작성해야합니다. OS X은 사용자 공간에서 특정 장치를 지원합니다. – WhirlWind

8

<sys/uio.h>을 대신 포함하십시오.

또는 둘 다 아닌 이유는 무엇입니까? 애플의 OS (OSX/아이폰 OS)의 경우

#ifdef __APPLE__ 
     #include <sys/uio.h> 
#else 
     #include <sys/io.h> 
#endif 

코드는 수동으로 프로젝트에 추가 할 수 있습니다 <sys/uio.h>

+1

그럴 수는 없습니다. 이 헤더 파일은 다른 기능 등을 선언하지 않습니까? – trojanfoe

+0

이것은 ** 수락 **되어야합니다. – gsamaras

0

컴파일 아는 것, 그것은 컴파일해야한다.

https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6/+/master/sysroot/usr/include/sys/io.h

편집 : 당신은 features.h해야 할뿐만 아니라

https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6/+/master/sysroot/usr/include/features.h

io.h의 기능이 나를 위해 작동하지 되었더라도 마지막으로, 내 커널에서 커서 지원을 얻었다. 그들은 잘 정리하고, 다른 사람을 도울지도 모른다. 이것은 앞으로 진행될 코드입니다 ...

static inline void outb(unsigned short port, unsigned char value) 
{ 
    __asm__ __volatile__ ("outb %1, %0" : : "dN" (port), "a" (value)); 

} 
static inline unsigned char inb(unsigned short port) 
{ 
    unsigned char value; 
    __asm__ __volatile__ ("inb %1, %0" : "=a"(value) : "Nd"(port)); 
    return value; 
} 

void update_cursor(int row, int col) 
{ 
    unsigned short position=(row*80) + col; 

    // cursor LOW port to vga INDEX register 
    outb(0x3D4, 0x0F); 
    outb(0x3D5, (unsigned char)(position&0xFF)); 
    // cursor HIGH port to vga INDEX register 
    outb(0x3D4, 0x0E); 
    outb(0x3D5, (unsigned char)((position>>8)&0xFF)); 
} 
+0

그래서 헤더 파일을 추가하면 ... 마술처럼 작동합니까? – trojanfoe

+0

예, 필요한 함수는 outb()이고 모든 것이 컴파일됩니다. 작은 커널에 커서 지원을 추가하는 중 ... 아직 작동하지 않는다는 것을 인정하지만, 나는 이것에 대해 아주 새로운 것입니다. – scubasteve623

1

bibor 작성이 완벽합니다. 내 파일은 이런 모양으로 잘 작동하지만.

#ifdef __linux 

#include <io.h> 

#elseif __apple 

#include<uio.h> 
관련 문제