こんばんは、以前購入した恐竜の着ぐるみ?(空気で膨らませるタイプ)をサンタさんに次男がお願いしてますが、却下され、乗り鉄活動の資金の代案が示された@kjunichiです。
背景
Julia公式のJuliaの組み込みの章にでてくるスレッドを扱うソースの例が動かせずにいた。
このページの下のほうの「An example of calling the Julia C API from a thread started by Julia itself:」のソース。
Cにすれば動きそうだが、問題が
JuliaのソースはCで書かれているので、WindowsでもCのソースとしてコンパイルできれば動きそうなものなのだが、拡張子を.cにしてコンパイルすると、コンパイルエラーとなってします。エラー内容的には関連するヘッダファイルを参照してそこの記載がC++で記載されているようでそこでCだとエラーとなっている模様。
main.c
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(36): error C2061: 構文エラー: 識別子 'atomic_bool'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(36): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(37): error C2061: 構文エラー: 識別子 'atomic_char'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(37): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(38): error C2061: 構文エラー: 識別子 'atomic_schar'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(38): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(39): error C2061: 構文エラー: 識別子 'atomic_uchar'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(39): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(40): error C2061: 構文エラー: 識別子 'atomic_short'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(40): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(41): error C2061: 構文エラー: 識別子 'atomic_ushort'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(41): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(42): error C2061: 構文エラー: 識別子 'atomic_int'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(42): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(43): error C2061: 構文エラー: 識別子 'atomic_uint'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(43): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(44): error C2061: 構文エラー: 識別子 'atomic_long'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(44): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(45): error C2061: 構文エラー: 識別子 'atomic_ulong'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(45): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(46): error C2061: 構文エラー: 識別子 'atomic_llong'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(46): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(47): error C2061: 構文エラー: 識別子 'atomic_ullong'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(47): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(48): error C2061: 構文エラー: 識別子 'atomic_char16_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(48): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(49): error C2061: 構文エラー: 識別子 'atomic_char32_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(49): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(50): error C2061: 構文エラー: 識別子 'atomic_wchar_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(50): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(51): error C2061: 構文エラー: 識別子 'atomic_int_least8_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(51): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(52): error C2061: 構文エラー: 識別子 'atomic_uint_least8_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(52): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(53): error C2061: 構文エラー: 識別子 'atomic_int_least16_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(53): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(54): error C2061: 構文エラー: 識別子 'atomic_uint_least16_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(54): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(55): error C2061: 構文エラー: 識別子 'atomic_int_least32_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(55): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(56): error C2061: 構文エラー: 識別子 'atomic_uint_least32_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(56): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(57): error C2061: 構文エラー: 識別子 'atomic_int_least64_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(57): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(58): error C2061: 構文エラー: 識別子 'atomic_uint_least64_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(58): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(59): error C2061: 構文エラー: 識別子 'atomic_int_fast8_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(59): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(60): error C2061: 構文エラー: 識別子 'atomic_uint_fast8_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(60): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(61): error C2061: 構文エラー: 識別子 'atomic_int_fast16_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(61): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(62): error C2061: 構文エラー: 識別子 'atomic_uint_fast16_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(62): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(63): error C2061: 構文エラー: 識別子 'atomic_int_fast32_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(63): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(64): error C2061: 構文エラー: 識別子 'atomic_uint_fast32_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(64): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(65): error C2061: 構文エラー: 識別子 'atomic_int_fast64_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(65): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(66): error C2061: 構文エラー: 識別子 'atomic_uint_fast64_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(66): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(67): error C2061: 構文エラー: 識別子 'atomic_intptr_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(67): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(68): error C2061: 構文エラー: 識別子 'atomic_uintptr_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(68): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(69): error C2061: 構文エラー: 識別子 'atomic_size_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(69): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(70): error C2061: 構文エラー: 識別子 'atomic_ptrdiff_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(70): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(71): error C2061: 構文エラー: 識別子 'atomic_intmax_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(71): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(72): error C2061: 構文エラー: 識別子 'atomic_uintmax_t'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(72): error C2059: 構文エラー: ';'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(121): error C2061: 構文エラー: 識別子 '_Atomic'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(122): error C2059: 構文エラー: '}'
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\work-stealing-queue.h(41): error C2061: 構文
エラー: 識別子 'alignas'
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\work-stealing-queue.h(42): error C2143: 構文
エラー: ')' が '定数' の前にありません。
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\work-stealing-queue.h(42): error C2143: 構文
エラー: '{' が '定数' の前にありません。
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\work-stealing-queue.h(42): error C2059: 構文
エラー: '定数'
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\work-stealing-queue.h(42): error C2059: 構文
エラー: ')'
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\work-stealing-queue.h(43): error C2143: 構文
エラー: ')' が '定数' の前にありません。
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\work-stealing-queue.h(43): error C2143: 構文
エラー: '{' が '定数' の前にありません。
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\work-stealing-queue.h(43): error C2059: 構文
エラー: '定数'
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\work-stealing-queue.h(43): error C2059: 構文
エラー: ')'
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\work-stealing-queue.h(44): error C2059: 構文
エラー: '}'
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\work-stealing-queue.h(46): error C2143: 構文
エラー: ')' が '*' の前にありません。
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\work-stealing-queue.h(46): error C2143: 構文
エラー: '{' が '*' の前にありません。
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\work-stealing-queue.h(46): error C2059: 構文
エラー: '型'
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\work-stealing-queue.h(46): error C2059: 構文
エラー: ')'
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\work-stealing-queue.h(67): error C2143: 構文
エラー: ')' が '*' の前にありません。
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\work-stealing-queue.h(67): error C2143: 構文
エラー: '{' が '*' の前にありません。
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\work-stealing-queue.h(67): error C2059: 構文
エラー: '型'
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\work-stealing-queue.h(67): error C2059: 構文
エラー: ')'
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\work-stealing-queue.h(88): error C2143: 構文
エラー: ')' が '*' の前にありません。
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\work-stealing-queue.h(88): error C2143: 構文
エラー: '{' が '*' の前にありません。
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\work-stealing-queue.h(88): error C2059: 構文
エラー: '型'
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\work-stealing-queue.h(88): error C2059: 構文
エラー: ')'
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\julia_threads.h(104): error C2061: 構文エラー
: 識別子 '_Atomic'
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\julia_threads.h(106): error C2059: 構文エラー
: '}'
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\julia_threads.h(115): error C2061: 構文エラー
: 識別子 '_Atomic'
C:\Users\kjw_j\.julia\juliaup\julia-1.11.2+0.x64.w64.mingw32\include\julia\julia_threads.h(115): fatal error C1003: プロ
グラム内のエラーが 100 個を超えました。コンパイルは中断されます。
自作PCで活動再開
久しぶりに自作PCで手元に自由に使えるPCができたので、背景に書いた作業の続きを行った。
実はMacOSでも同じソースを動かそうとして、1年近く前に取り組んだが、Julia側からソースに記載した関数を呼び出せずにいた。
どうなれば動かくは分かるが
WindowsというかC++のソース中に記載した関数をCの関数としてコンパイルできればJuliaからも呼べることは理解できてはいたが、今回のタイミングまで、
extern "C"
を関数手前につける程度の対応しか出来ていなかった。
DLL周りのことを思い出し、解決に
WindowsのDLLを作成する場合、C++コンパイラに呼び出し規約の指定ができることが分かった。(最初に気づけ!)
double c_func(int i)
とc_funcを宣言して定義している個所を以下のようにexter "C"に加え、呼び出し規約を指定して
extern "C" __declspec(dllexport) double c_func(int i)
と変更することで無事動いた。
MacOSの問題も解決した
MacOSで動かなかったのは、Windows <->Macを行き来するさいにC++のコードとしてビルドを行っており、MacOSではCとして扱えば、すんなり動いた。。
関連記事
- Juliaでusing PyPlotするとクラッシュするトラブルを解決した。 - non vorrei lavorare
- Julia言語からmruby-webcamを使ってWebカメラの画像を取得した - non vorrei lavorare