#c #static-libraries #header-files
#c #статические библиотеки #заголовочные файлы
Вопрос:
Я пытаюсь создать свою собственную статическую библиотеку, но я не могу использовать ее в своем другом проекте. Я скомпилировал библиотеку в командной строке с помощью этой команды:
cl /c /EHsc Matrix3.cpp
Я добавил его в качестве ссылки на свой проект и добавил каталог, содержащий скомпилированный файл .lib, в свой проект.
Ниже приведен код библиотеки.
Файл заголовка:
#pragma once
typedef struct
{
float m[3][3];
} matrix3;
class Matrix3
{
public:
Matrix3();
~Matrix3();
matrix3* MatrixAdd(matrix3* A, matrix3* B);
matrix3* ScalarMatrixMul(float scalar, matrix3* A);
matrix3* MatrixMult(matrix3* A, matrix3* B);
};
.cpp-файл:
#include "Matrix3.h"
Matrix3::Matrix3() {
}
Matrix3::~Matrix3() {
}
matrix3* Matrix3::MatrixAdd(matrix3* A, matrix3* B) {
matrix3* result = new matrix3;
for (int row = 0; row < 3; row )
for (int col = 0; col < 3; col )
result->m[row][col] = A->m[row][col] B->m[row][col];
return resu<
}
matrix3* Matrix3::ScalarMatrixMul(float scalar, matrix3* A) {
matrix3* result = new matrix3;
for (int row = 0; row < 3; row )
for (int col = 0; col < 3; col )
result->m[row][col] = scalar * A->m[row][col];
return resu<
}
matrix3* Matrix3::MatrixMult(matrix3* A, matrix3* B) {
matrix3* result = new matrix3;
float sum;
for (int row = 0; row < 3; row ) {
for (int col = 0; col < 3; col ) {
sum = 0;
for (int k = 0; k < 3; k )
sum = A->m[row][k] * B->m[k][col];
result->m[row][col] = sum;
}
}
return resu<
}
Комментарии:
1. Использование указателей — это плохой дизайн, он заставляет пользователя беспокоиться об управлении памятью и значительно затрудняет оптимизацию компилятора.
Ответ №1:
В настройках вашего другого проекта, в C / C -> Общие-> Дополнительные включаемые каталоги, вам необходимо указать каталог, в котором Matrix3.h
он размещен. В противном случае компилятор будет искать в том же каталоге, где находится компилируемый исходный файл.