Clang OS X Lion, cannot find cstdint

前端 未结 1 1420
长发绾君心
长发绾君心 2020-12-06 00:23

I\'m trying to compile an application that utilizes cstdint. Since Apple deprecated the gcc, I wanted to try compiling it with clang, but i get the error:

fa         


        
相关标签:
1条回答
  • 2020-12-06 01:23

    Presumably, you have the source code to this application, so you can modify the headers to include the correct cstdint header, as Clang 3.0 (which Lion's tools come with) does have the header.

    Quick Solution

    The header is under the tr1 directory, so you will want to do either of these includes:

    #include <tr1/cstdint>
    

    Or

    #include <stdint.h> // which will use the C99 header
    

    Longer, boring explanation

    After doing some additional reading since I remember you can do this without the tr1 directory:

    By default, you are going to be including C++ headers from /usr/include/c++/4.2.1, which are the GNU GCC headers. /usr/include/c++/4.2.1/tr1 includes the TR1 header files, like cstdint.

    The alternative method is to compile using the Clang++ frontend and passing the -stdlib=libc++ flag, which will use the headers from /usr/include/c++/v1, which are Clang's C++ header implementations. It has cstdint.

    Example:

    // file called example.cxx
    #include <tr1/cstdint>
    
    int main() {
        // whatever...
    }
    

    Compile this with:

    g++ example.cxx
    

    or

    clang++ example.cxx
    

    And it will do what you want.

    If you don't want to use the tr1 version (which is roughly the same, if not exactly):

    // file called example.cxx
    #include <cstdint>
    
    int main() {
        // stuff
    }
    

    This is compiled like this:

    clang++ -stdlib=libc++ example.cxx
    

    Though if you use -stdlib=libc++, it means you're linking to Clang's C++ library libc++, rather than GCC's libstdc++.

    0 讨论(0)
提交回复
热议问题