こんばんは、以前購入した恐竜の着ぐるみ?(空気で膨らませるタイプ)をサンタさんに次男がお願いしてますが、却下され、乗り鉄活動の資金の代案が示された@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