CのDLLをVC++でコンパイルする方法は?

このQ&Aのポイント
  • 質問者はC言語初心者で、VC++でCのDLLをコンパイルする方法について質問しています。
  • 具体的なエラーメッセージとして、LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です Debug/HelloWorld.exe : fatal error LNK1120: 外部参照 1 が未解決です。と出ています。
  • 質問者はDOSプロンプトでのコンパイルは成功しているが、VC++でのコンパイルがうまくいかない状況です。
回答を見る
  • ベストアンサー

CのDLLをVC++でコンパイルしたいのですが、エラーになってしまいます。

c言語の初心者なのですが、質問させて下さい。 javaからCのDLLを呼び出したく、 (下記のソースを書いたのですが、VC++でコンパイルすると LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です Debug/HelloWorld.exe : fatal error LNK1120: 外部参照 1 が未解決です。 と出てしまいます。 過去ログ等を見て、作成しているプロジェクトが悪いのかなと思い、 MFC appWizark(dll) win32 Application win32 Console Application win32 Dynamic-Link Library 等を作ってみてコンパイルしてみたのですが、駄目でした。 ちなみにDOSプロンプトで cl -IC:\j2sdk1.4.2_10\include\win32 -LD HelloWorl d.c -o HelloWorld.dll と実行するときちんとコンパイルできて、正常に実行も出来ました。 VC++でどうやればコンパイルできるのでしょうか? #include "HelloWorld.h" JNIEXPORT void JNICALL Java_HelloWorld_printMessage (JNIEnv *env, jobject me) { printf("Helo World!!!\n"); return; }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

プロジェクト作成時に win32 Dynamic-Link Library を使えば良いと思います。以下のサイトが参考になります。 http://www1.u-netsurf.ne.jp/~ysk-net/JSpe/Java/jni-.net2003.html

参考URL:
http://www1.u-netsurf.ne.jp/~ysk-net/JSpe/Java/jni-.net2003.html
take_july
質問者

お礼

ありがとうございます。できました。

関連するQ&A

  • 「外部シンボル '__inp' が未解決」

    Borland C++CompilerとCPad for Borland C++Compilerをつかってdllを作ろうとしているのですが、 コンパイルがうまく行きません。 ------------------------------<Dio32c.c>------------------------------ #include "jni.h" #include <stdio.h> #include <conio.h> JNIEXPORT long JNICALL Java_IO32_InpB(JNIEnv *env, jobject obj, long port) { return _inp(port); } JNIEXPORT void JNICALL Java_IO32_OutB(JNIEnv *env, jobject obj, long port, long data) {_outp(port, data); return; } ---------------------------------------------------------------------- というプログラムに対し、コンパイル時パラメータを「-WD」と指定してコンパイルすると、以下のメッセージが返ってきちゃいます。 ---------------------------------------------------------------------- ■C:\My Documents\C> bcc32 -WD Dio32jc.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland Dio32jc.c: ==<警告文は字数制限のため割愛させていただきました。by taropoo>== Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: 外部シンボル '__inp' が未解決(C:\MY DOCUMENTS\C\DIO32JC.OBJ が参照) Error: 外部シンボル '__outp' が未解決(C:\MY DOCUMENTS\C\DIO32JC.OBJ が参照) ---------------------------------------------------------------------- どなたか、原因&対策、分かりませんでしょうか?

  • VC++でエラー

    --------------------構成: 01 - Win32 Debug-------------------- コンパイル中... text.cpp リンク中... LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です Debug/01.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー 01.exe - エラー 2、警告 0 な、なんだ?? 何が起こったんだ?? 教えてください。

  • MS VC++コンパイルエラーなし...ビルドエラー

    Microsoft Visual C++ で、新規作成 - 「プロジェクト」 - Win32 Application で作成し、「ファイル」-  C++ソースファイルで、main.cpp と言う名前で、以下のソースを作成しました。 #include <stdio.h> #include <stdlib.h> void main(int argc) { FILE *Fout; Fout = fopen("Date.ini" , "W "); fprintf(Fout , "%d" ,argc); fclose( Fout); } 別に作成したdllが、fscanfするためのテキストファイルを日次ハバッチで、作成したいと思っています。 尚、ここでfprintfするデータは、パラメータとして、読み込みたいと思っています。 (Visual BASICの command関数のように) 上記のソース、コンパイルは、通るのですが、ビルドすると以下のエラーが出ます。 「LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16"は未解決です Debug/Date_ini.exe : fatalerror LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー 解決法をご教示いただきたく思います。 宜しくお願い致します。

  • コンパイルエラー

    VCでファイル(.c)をコンパイルしたところ 以下のエラーが出てしまいました。 error LNK2019: 未解決の外部シンボル _sqlcxt が関数 _xxxxxxxx で参照されました。 なんかの設定不足でしょうか? お分かりの方がおりましたら、よろしくお願いします。

  • VC++ .NET 2005 Expressで、Apacheのコンパイル

    VC++ .NET 2005 ExpressでApache2.0.59(ssl)をコンパイルし、コンパイル(コマンドラインからです。)まではうまくいったのですが、実行させようとすると、「MSVCR80.dllが見つからなかったため、このアプリケーションを開始できませんでした。...」というエラーが出て実行できません。 別のマシンであれば、Microsoft Visual C++ 2005 再頒布可能パッケージ を入れる必要がある(今までのように単なるコピーではだめ。)ことは分かったのですが、そもそもVC++入っているし、再頒布可能パッケージもインストールしてみたのですが、インストールせずに終了してしまいます。(多分既にランタイムがあるからだと思ってます。) どなたか原因が分かる方がいれば、アドバイスを下さい。

  • Visual C++6.0を使っていての質問

    タイトルのとおりの質問なのですが、 LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です Debug/gasoti2bai.exe : fatal error LNK1120: 外部参照 1 が未解決です。 というエラーがコンパイル時に出るのですがどうしたらよろしいのでしょうか。 新規作成->win32 アプリケーション で空のオブジェクトを選択しました。できればこの設定を変えずに解決したいのですが・・ なにとぞよろしくお願いいたします。

  • VC2005のDLLを6.0で呼び出すには

    VC 2005 Pro Editionで作ったライブラリ(ヘッダ、lib、dll)を頂きました。    頂いたDLLの形式は定義ファイル.defを使わない形式、declspec(dllexport)を使う形式の方です。  呼び出し側はVC6.0EnterPrize(SDK)を使います。 (諸事情により6.0以上にUPすることは不可能)     まず、静的リンクをし、関数を呼び出してみました。  (設定のリンクよりlibをリンクさせ、ヘッダをインクルードして)  すると以下のメッセージが出てしまいます。 リンク中... Dialog1.obj : error LNK2001: 外部シンボル ""__declspec(dllimport) void __cdecl Init(unsigned char *,unsigned char *,unsigned char *,unsigned char *)" (__imp_?Init_Card@@YAXPAE000@Z)" は未解決です Debug/CardMake.exe : fatal error LNK1120: 外部参照 1 が未解決です 。 link.exe の実行エラー    色々やってみましたが、このエラーから回避できませんでした。  ヘッダ自体に #ifdef _USRDLL #define DLL_PORT __declspec(dllexport) #else #define DLL_PORT __declspec(dllimport) #endif    の宣言があるので、別に特別なことをしなくても、大丈夫そうなのですが、何故か出来ません。  次に動的リンクを行っていました。  するとLoadLibraryでエラーになり、GetLastErrrorで14001(エラーメッセージはつかめず)が返ってきました。 (色々調べたところ定義ファイルがないと動的リンクはできないようですね)    というわけでにっちもさっちも行かなくなった状況です。  そこでご質問です。 (1)定義ファイルを使わない形式のライブラリ(暗示的に定義されているもの)はどのように呼び出させばよいでしょうか? (2)2005のライブラリを6.0から呼び出すことは可能ですか?  また呼び出す方法は?  すいませんがご回答をお願いします。

  • 外部シンボル "_main" は未解決です というエラーが出ます

    初めまして、プログラミング初心者です。 VC++6.0を使っています。 Win32コンソールアプリケーションで書籍に載っていたサンプルプログラムを実行したところ、 『LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です』 『Debug/shi.exe : fatal error LNK1120: 外部参照 1 が未解決です。』 というエラーが出ます。 元々C言語のプログラムなのでmain関数が必要だということはここのログを見て分かったのですが、C++の場合はどのようにすれば良いのでしょうか? 最終的にはこのプログラムをBorland社のC++Builderで使えるようになりたいのですが… プログラムを載せたいのですが、書籍のプログラムをここに載せてもいいのでしょうか?禁止事項を読んでみたのですが、いまいちよく分からなかったので… 初歩的なところから躓いてしまい、全く進めない状況です。 大変恥ずかしいのですが、どなたかご教授願えませんでしょうか。お願いします。

  • VC6.0でエラー

    環境:winNT4.0,vc6.0 コンソールアプリケーション作成でデバックモードではエラー、警告は、出ないのですが リリースモードで下記のようなエラーがでます。 エラーを消すにはどうしたらよいのでしょうか? 宜しくお願いします。 --------------------構成: muktc - Win32 Release-------------------- リンク中... muktc.obj : error LNK2001: 外部シンボル "_WSACleanup@0" は未解決です muktc.obj : error LNK2001: 外部シンボル "_WSAStartup@8" は未解決です muktc.obj : error LNK2001: 外部シンボル "_WSAGetLastError@0" は未解決です muktc.obj : error LNK2001: 外部シンボル "_gethostname@8" は未解決です muktc.obj : error LNK2001: 外部シンボル "_NetRemoteTOD@8" は未解決です Release/muktc.exe : fatal error LNK1120: 外部参照 5 が未解決です。 link.exe の実行エラー muktc.exe - エラー 6、警告 0

  • Visual studio c++ dll作成時のエラー

    c初心者です。 ユーザーからもらったaaa.dllにある関数Calc_UL(struct型)をコールするbbb.dllを作成しようしています。 コンパイルはとおるのですが、 dllのビルドがうまくいきません。ユーザーからはaaa.dllとaaa.libとaaa.hだけもらっており、aaa.libにはリンク設定をしています。 bbb.obj : error LNK2001: 外部シンボル ""int __stdcall Calc_UL(struct ULData *)" (?Calc_UL@@YGHPAUULData@@@Z)" は未解決です Debug/bbb.dll : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー aaa.dllを指定するところが特に無いのですが、どこかで指定しないといけないのでしょうか? よろしくお願いします。

専門家に質問してみよう