質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

2444閲覧

スタティックライブラリで分割コンパイルすると、ソースファイルが見つからず未解決の外部シンボルエラー。

6janazi

総合スコア15

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/09/25 13:12

編集2018/09/25 13:29

お世話になっております。

下記のクラスのヘッダとソースファイルを含んだライブラリで

下記のように書く

LNK2019 未解決の外部シンボル
"public: double __cdecl Differential::ReturnDiffvalue(double,int,double)" (?ReturnDiffvalue@Differential@@QEAANNHN@Z) が関数 main で参照されました。 test C:\Users
****\source\repos\test\DrawPixel.obj **

が発生しました。

Differential.h class Differential { public: double ReturnDiffvalue(const double num, int power, double var); };
Differential.cpp //単純な微分。numは定数、powerは累乗、varは変数 double Differential:: ReturnDiffvalue(const double num, int power, double var) { int i = 1; auto num2 = 0;//4x2乗の場合、4*2*x(1乗)になる。定数4をnum,2をnum2,指数1をexponent,変数xをvarとすると auto p = 0; num2 = power; int exponent = (power >= 1) ? power - 1 : 1; i = exponent; while (i != 0) { p = pow(var, exponent);//varのi乗 i--; } auto num3 = p; return num * num2*num3; }
test.cpp #include "Differential.h" Differential* d; int main() { d->ReturnDiffvalue(3, 2, 4); return 0; }

当該する実装部分をcppファイルではなく、下記のようにヘッダファイルに直接書くとコンパイルが通るのですが、

Differential.h #pragma once #include <cmath> class Differential { public: double ReturnDiffvalue(const double num, int power, double var); /* { int i = 1; auto num2=0; auto p = 0; num2 = power; int exponent = (power >= 1) ? power - 1 : 1; i = exponent; while (i != 0) { p=pow(var, exponent);//varのi乗 i--; } auto num3 = p; return num * num2*num3; }*/ }; OSはWindows10 Home(64bit) コンパイラはVS2017です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2018/09/25 13:16

どういうふうにコンパイルしてるんですか?test.cppもスタティックライブラリに含めてるんでしょうか
6janazi

2018/09/25 13:19

test.cppはスタテックライブラリに含まれておりません。
yuki23

2018/09/25 13:19

「ライブラリで分割されたヘッダとソースファイル」ということは、 Differential.cpp と test.cpp は別の場所にあるということですか? どこに配置しているのか教えてください。
6janazi

2018/09/25 13:22

書き方に語弊があり申し訳ありません。Differential.cppはライブラリ側に配置してます
guest

回答3

0

ベストアンサー

追加のライブラリに該当の DLLを入れたでしょうか?

Projectプロパティ

最近、やったこと無いのでちょっと自信が無いですが、、、

投稿2018/09/25 13:50

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

6janazi

2018/09/25 14:19

入れてみましたが、変化なしです。ヘッダに実装を書くとコンパイルが成功して、ソースファイルだと見つからない状況は変わってないですね・・・
6janazi

2018/10/01 05:57

すみません、解決しました。cppソースをヘッダが見えないディレクトリに入れていたためコンパイラが認識できていないようでした。 ご迷惑をおかけしました
guest

0

1.確認ですが、スタティックにしろダイナミックにしろ、ライブラリを作った経験はありますか?

経験があるなら以下は無視してください。
2.dllexportや、モジュール定義ファイルなど、エクスポートはしていますか?

投稿2018/09/26 11:52

yominet

総合スコア187

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

6janazi

2018/09/26 13:12

1.これがはじめてです。 2.していないと思います
guest

0

test.cpp のリンクオプションで、そのスタティックライブラリを含めましょう

投稿2018/09/25 13:21

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

6janazi

2018/09/25 13:31

ライブラリディレクトリに含めるという事でしょうか
y_waiwai

2018/09/25 13:46

ライプラリのファイルを指定するオプションがあると思いますが
6janazi

2018/09/25 14:21

すいません説明不足でした。リンカの全般->追加のライブラリディレクトリにスタティックライブラリを含めるという事でしょうか
y_waiwai

2018/09/25 14:25

ライブラリディレクトリはディレクトリ入れるとこです ライブラリファイルってのはどういうファイル名ですか?
6janazi

2018/09/25 14:38

Gamelibrary.libです
y_waiwai

2018/09/25 14:43

なら、そのファイルのフルパスを、追加の依存ファイルのとこに書いてみてくだされ
6janazi

2018/09/25 14:56

実装部分をcppファイルではなくヘッダに書いたら通りました
y_waiwai

2018/09/25 15:01

それ、ライブラリにしてる意味がないw
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問